在MATLAB矩阵中查找元素的有效方法

Ora*_*ind 5 matlab find matrix-indexing

我想知道如何在给定的代码中处理瓶颈.

%% Points is an Nx3 matrix having the coordinates of N points where N ~ 10^6
Z = points(:,3)
listZ = (Z >= a & Z < b); % Bottleneck
np = sum(listZ); % For later usage
slice = points(listZ,:);
Run Code Online (Sandbox Code Playgroud)

目前for N ~ 10^6,np ~ 1000number of calls to this part of code = 1000瓶颈声明总共花费大约10秒,与我的其余代码相比,这是一大块时间.

分析结果

针对@EitanT请求的索引语句的示例代码的更多屏幕截图

分析示例代码 分析示例代码

Moh*_*nia 8

如果一方的平等并不重要,你可以将其重新表述为单方面的比较,它会快一个数量级:

Z = rand(1e6,3);
a=0.5; b=0.6;
c=(a+b)/2;
d=abs(a-b)/2;
tic
for k=1:100,
    listZ1 = (Z >= a & Z < b); % Bottleneck
end
toc

tic
for k=1:100,
    listZ2 = (abs(Z-c)<d);
end
toc

isequal(listZ1, listZ2)
Run Code Online (Sandbox Code Playgroud)

回报

Elapsed time is 5.567460 seconds.
Elapsed time is 0.625646 seconds.

ans =

     1
Run Code Online (Sandbox Code Playgroud)

  • 另请参阅[最近的C编程问题](http://stackoverflow.com/a/17095534/1165522)的已接受答案. (2认同)