例如,A是数字set。b是元素。
我想测试b中的数字是否是集合A的元素。
我知道matlab函数“ismember”可以做到这一点,但是当我使用一百万次时,它的速度还不够快。
b=[1,2,9,100];
A=[1,2,3,4,5,6,7,8,9];
tic;for ii=1:1e6,ismember(b,A);end;toc
Elapsed time is 45.714583 seconds.
我想返回[1,1,1,0],因为1,2,9位于集合A中,而100没有。
您是否知道某些功能,例如ismember或某些方式比“ismember”更有效?
最佳答案
您可以使用混合版本,即ismemberoneoutput
。混合版本要快得多。
b=[1,2,9,100];
A=[1,2,3,4,5,6,7,8,9];
tic;for ii=1:1e5,ismember(b,A);end;toc
%Elapsed time is 9.537219 seconds. On my pc
% A must be sorted!!! In this example it is already sorted,
% so no need for this here.
tic;for ii=1:1e5,builtin('_ismemberoneoutput',b,A);end;toc
%Elapsed time is 0.376556 seconds. On my pc
关于matlab - 是否有类似 "ismember"的函数,但效率更高?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17714487/