是否有像"ismember"这样的功能但效率更高?

lih*_*tao 11 performance matlab set

例如,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.
Run Code Online (Sandbox Code Playgroud)

我想返回[1,1,1,0],因为1,2,9在集合A中,而100则不在.

你知道像ismember这样的某些功能还是比"ismember"更有效的方法?

Mar*_*cin 13

你可以使用mex版本,即ismemberoneoutput.mex版本要快得多.

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
Run Code Online (Sandbox Code Playgroud)

  • +1:还有[`ismembc`](http://undocumentedmatlab.com/blog/ismembc-undocumented-helper-function/). (4认同)
  • @lihaitao 你可以尝试其他无证版本,`ismembc(b,A)`。我通过检查 Matlab 的 ismember.m 的来源了解了 buildin (2认同)
  • 在 R2015a 中删除。 (2认同)