331 views (last 30 days)

I have the folowing:

vector=[1 3 8 9];

matrix=[ 100 1 5 9 6; 100 10 13 3 8; 100 9 10 1 4; ];

% I want to search and replace the vector element with "0"in the matrix (i.e new matrix should be : Newmatrix=[ 100 0 5 0 6; 100 10 13 0 0; 100 0 10 0 4; ]; )

The script is:

Newmatrix=zeros(size(matrix));

for i=1:numel(matrix)

for j=1:length(vector)

valvect=vector(j);

if matrix(i)==valvect

Newmatrix(i)=0;

else

Newmatrix(i)=matrix(i);

end

end

end

The results is not the desired one but:

Newmatrix=100 1 5 0 6

100 10 13 3 8

100 0 10 1 4

So what I'm doing wrong?

Thank you

Youssef Khmou
on 3 Mar 2013

hi, try ;

F=matrix;

for i=1:length(vector)

F(F==vector(i))=0;

end

Joel Bly
on 11 Apr 2019

Walter Roberson
on 12 Apr 2019

If you use ismember() with two outputs, then the second output is the index at which the element in the first parameter appears in the second parameter. In places that the element does not occur, then the returned value will be 0 there. You can select just the valid indices by indexing the second output by the first output.

[is_it_there, idx] = ismember(A, B);

idx(is_it_there)

Metin Ozturk
on 1 Aug 2018

The more vectorized and easier way to do this could be as follows:

new_matrix = changem(matrix,zeros(length(vector),1),vector);

BJ Anderson
on 12 Mar 2019

YES YES YES. It looks like hardly anyone knows about changem...I see similar questions asked and typically the "solution" involves a loop. A loop in MATLAB is the first sign you're doing something wrong.

changem covers so many situations, and it is elegant and concise, not to mention avoids the risk of re-reassigning an element.

changem is almost always the right anwer. Let the world know!

Thanks Metin for helping to spread the word.

BJ Anderson
on 12 Mar 2019

A quick update on changem:

Sadly, if one inspects the actual code within changem, it functions as a loop. While it is a handy one-liner, it does not have the time-savings of moving from a looped function to an matrix-operation function.

Walter Roberson
on 3 Mar 2013

Image Analyst
on 3 Mar 2013

Try it this way:

newMatrix = matrix % Initialize

for k = 1 : length(vector)

newMatrix(matrix==vector(k)) = 0

end

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

Start Hunting!
## 1 Comment

## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/65674-replace-elements-of-matrix#comment_1157443

⋮## Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/65674-replace-elements-of-matrix#comment_1157443

Sign in to comment.