How to replace certain values in an array without using for-loop?
Ältere Kommentare anzeigen
I have a very long array of length couple million. Say, A=[1;2;3;4;5;2;3;4;1;....] I have another array of different length (order of thousands to millions), we can call this second array B.
I would like to replace values in the first array with 0s if the value in A is present in B.
Currently, I have the following code to do it:
for i=1:length(B)
A(A==B(i))=0;
end
However, I would like to get rid of for loop and make this as efficient as possible since the arrays that I am working with is very large, and this is only a very small portion of the entire code, which needs to be computable before I graduate.
Thank you in advance,
Antworten (1)
Azzi Abdelmalek
am 16 Jul. 2013
Bearbeitet: Azzi Abdelmalek
am 16 Jul. 2013
A(ismember(A,B))=0
4 Kommentare
Louis
am 16 Jul. 2013
Azzi Abdelmalek
am 16 Jul. 2013
Look at this test
A=randi(1000,1000);
B=randi(1000,1000,1);
A1=A;
B1=B;
tic
for i=1:numel(B)
A(A==B(i))=0;
end
time_with_loop=toc
%-------------------------------
tic
A1(ismember(A1,B1))=0;
time_with_ismember=toc
time_with_loop = 2.3960
time_with_ismember =0.0900
Muthu Annamalai
am 16 Jul. 2013
@Azzi shouldn't logical indexing work in this case?
A1( A1 == B1 ) = 0
Image Analyst
am 16 Jul. 2013
No, it won't. That will work only if they match up. It won't remove elements that occur anywhere in A or B.
Kategorien
Mehr zu Resizing and Reshaping Matrices finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!