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

2 views (last 30 days)
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!

Accepted Answer

madhan ravi
madhan ravi on 17 Apr 2019
Edited: madhan ravi on 17 Apr 2019
Wanted = zeros(size(matrix));
indices=sub2ind(size(matrix),1:size(matrix,1),Vector);
Wanted(indices)=matrix(indices)
  6 Comments
Isabelle Bouret
Isabelle Bouret on 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 on 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

Sign in to comment.

More Answers (1)

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

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!