intersect
звонки ismember
. В вашем случае вам не нужны все сложные проверки, которые выполняет intersect
, поэтому вы можете сэкономить некоторые накладные расходы и напрямую вызвать ismember
(примечание: я удостоверился, что вы вызвали обе функции перед синхронизацией их):
a = randi(1000,100,1);
b = randi(1000,100,1);
>> tic,intersect(a,b),toc
ans =
76
338
490
548
550
801
914
930
Elapsed time is 0.027104 seconds.
>> tic,a(ismember(a,b)),toc
ans =
914
801
490
548
930
550
76
338
Elapsed time is 0.000613 seconds.
Вы можете сделать это еще быстрее, вызвав ismembc
, функцию, которая непосредственно выполняет тестирование. Обратите внимание, что ismembc
требует отсортированных массивов (так что вы можете отбросить сортировку, если ваш вход уже отсортирован!)
tic,a=sort(a);b=sort(b);a(ismembc(a,b)),toc
ans =
76
338
490
548
550
801
914
930
Elapsed time is 0.000473 seconds.