我有一个在MATLAB 2015中运行的程序,调用intersect
函数超过500万次。例如:
x=[2,4,6,3]
y=[3,5,7,9,1,6,4]
tic;for i=1:5*1e6;t=intersect(x,y);end;toc;
*Elapsed time is 365.038992 seconds in my computer
由于intersect
函数,我的程序速度太慢了,有没有一种更有效的替代方法?是否有内置函数或Mex或类似的东西。我也尝试过unique(x(ismember(x,y)))
:
tic;for i=1:5*1e6;t=unique(x(ismember(x,y)));end;toc;
*Elapsed time is 227.7381 seconds in my computer
虽然这些改进有一定的作用,但这还不够!我在使用 unique() 和 ismember() 函数时也遇到了同样的问题。
x
和y
是静态的,那么你可以安全地将intersect
从循环中提取出来。 - Yvonsort(y(any(bsxfun(@eq,x(:),y(:).')))).
- TroyHaskin