Asked by Isabelle Bouret
on 17 Apr 2019

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!

Answer by madhan ravi
on 17 Apr 2019

Edited by madhan ravi
on 17 Apr 2019

Accepted Answer

Wanted = zeros(size(matrix));

indices=sub2ind(size(matrix),1:size(matrix,1),Vector);

Wanted(indices)=matrix(indices)

madhan ravi
on 17 Apr 2019

See edited answer. size(matrix,1) not 2 also Vector.' - transpose Vector

indices=sub2ind(size(matrix),1:size(matrix,1),Vector.')

% it's easy to figure it out isn't ?

1:size(matrix,1) % creates a row vector

Vector.' % so if Vector is a column vector transpose it to create a row vector

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
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.

Answer by Walter Roberson
on 17 Apr 2019

Edited by 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);

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.