# Replace elements of matrix

39 views (last 30 days)
Ionut Anghel on 3 Mar 2013
Commented: Mike Lynch on 24 Nov 2020
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
Mike Lynch on 24 Nov 2020
The accepted answer or changem are cleaner and more compact, but for the code you wrote the addition of a "break" should fix the problem.
if matrix(i)==valvect
Newmatrix(i)=0;
break
else ...

Youssef Khmou on 3 Mar 2013
hi, try ;
F=matrix;
for i=1:length(vector)
F(F==vector(i))=0;
end
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);
##### 2 CommentsShowHide 1 older comment
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.

Bruno Luong on 12 Mar 2019
F = matrix .* ~ismember(matrix,vector)
Bruno Luong on 13 Mar 2019
A variant is:
matrix(ismember(matrix,vector)) = 0

Walter Roberson on 3 Mar 2013
Suppose you set Newmatrix to 0 because matrix matched vector(1). Now what happens when you go on to the next j to test if matrix matched vector(2) ?

Image Analyst on 3 Mar 2013
Try it this way:
newMatrix = matrix % Initialize
for k = 1 : length(vector)
newMatrix(matrix==vector(k)) = 0
end
Ionut Anghel on 3 Mar 2013
Thanks It is working as well