how to change every value not equal to X in every rows

2 Ansichten (letzte 30 Tage)
Hi,
I have a matrix (20000x365) and I have a vector(20000x1) in which I have the column assiciate with the number that I DON'T want to change (This number change for every rows) .
For every rows I want to change every colums, beside the one that is in the vector, for 0
EX: matrix [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21]
Vector [3,1,3,2]
The answers should be [0 0 1 0; 8 0 0 0; 0 0 6 0; 0 3 0 0]
Thanks for your help!

Akzeptierte Antwort

madhan ravi
madhan ravi am 17 Apr. 2019
Bearbeitet: madhan ravi am 17 Apr. 2019
Wanted = zeros(size(matrix));
indices=sub2ind(size(matrix),1:size(matrix,1),Vector);
Wanted(indices)=matrix(indices)
  6 Kommentare
Isabelle Bouret
Isabelle Bouret am 17 Apr. 2019
Thank you!!
I have to modified a llittle bit
Wanted = zeros(size(l_s));
for i=1:L
if Vector(i,:)==0
continue
else
indices=sub2ind(size(Matrice),i,Vector(i,:).');
Wanted(indices)=Matrice(indices);
end
end
This work perfectly event though it may not be efficient
Walter Roberson
Walter Roberson am 17 Apr. 2019
If you are going to loop then
Wanted = zeros(size(l_s));
for i = 1:L
if Vector(i) ~= 0
Wanted(i, Vector(i)) = Matrice(i, Vector(i));
end
end
or
Wanted = zeros(size(l_s));
for i = find(Vector)
Wanted(i, Vector(i)) = Matrice(i, Vector(i));
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 17 Apr. 2019
Bearbeitet: Walter Roberson am 17 Apr. 2019
rows = size(EX_matrix,1);
ind = (1:rows).' + (Vector(:)-1)*rows;
Output = zeros(size(EX_matrix));
Output(ind) = EX_matrix(ind);

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by