# Using FIND for common elements WITHOUT a loop (Vectorized?)

조회 수: 1(최근 30일)
Dave 2019년 2월 2일
댓글: Omar Salah 2020년 4월 11일
Hello,
I have an array A 100x1 with different datenum that
I need to find in a big array B 5000000x1 (all datenum in B are in A, just repeated many times)
and then replace w another datenum C 100x1 (same index as A)
I am using find( ) but it is taking too long. Is there a way to do this without a loop?
BB=B %making a copy of B to check after.
for i=1:size(A,1)
loc=find(B==A(i))
BB(loc)=C(i);
end
##### 댓글 수: 2표시숨기기 이전 댓글 수: 1
Dave 2019년 2월 3일
thank you, I don't know how to take your comment as the accepted answer.

댓글을 달려면 로그인하십시오.

### 채택된 답변

Stephen 2019년 2월 3일
Use ismember and its second output argument:
>> A = randperm(5)
A =
3 5 4 1 2
>> B = randi(5,1,9)
B =
5 1 2 5 1 2 4 5 4
>> C = (1:5).^2
C =
1 4 9 16 25
>> [~,X] = ismember(B,A);
>> BB = C(X)
BB =
4 16 25 4 16 25 9 4 9
##### 댓글 수: 3표시숨기기 이전 댓글 수: 2
Omar Salah 2020년 4월 11일
Hi Stephen, I really wanted to thank you. I wanted to imporve my really slow code in which I tryz to find a 100k elements in a 320k elements vector. using is memeber the code runs in 5.4832 seconds instead of 1170 seconds when using for and parfor. Vectorization is magical for Big data.

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

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

Start Hunting!

Translated by