【发布时间】:2012-10-09 12:02:25
【问题描述】:
我正在寻找一种“矢量化”以下代码的方法。也就是说,我想摆脱需要很长时间的 for 循环(这个 for 循环嵌套在另一个重复超过 40,000 次的 for 循环中)。
for k=1:length
if coords(k,1)<=4 && coords(k,2) <=8
upperLeft(countUL,:) = coords(k,:);
countUL=countUL+1;
end
if coords(k,1)>4 && coords(k,2) <=8
upperRight(countUR,:) = coords(k,:);
countUR=countUR+1;
end
if coords(k,1)>4 && coords(k,2) >8
lowerRight(countLR,:) = coords(k,:);
countLR=countLR+1;
end
if coords(k,1)<=4 && coords(k,2) >8
lowerLeft(countLL,:) = coords(k,:);
countLL=countLL+1;
end
end
我一开始尝试使用 Matlab find 函数(例如 find(coords(k,1)<=4)),但在我的情况下,我有两个参数需要“查找”。我尝试了类似find(coords(:,1)<=4 && coords(:,2)<=8) 的方法,但是由于&& 的操作数不是标量,所以这不起作用。任何关于如何做到这一点的想法将不胜感激!
【问题讨论】:
-
我建议你不要使用
length作为变量名(或者那可能是一个错字) -
使用 Matlab 的 FEX Consolidator? mathworks.com/matlabcentral/fileexchange/8354
标签: matlab