我正在寻找一种"矢量化"以下代码的方法.也就是说,我想摆脱for循环,这需要很长时间(这个for循环嵌套在另一个for循环中,重复超过40,000次).
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
Run Code Online (Sandbox Code Playgroud)
我首先尝试使用Matlab find函数(例如find(coords(k,1)<=4)),但在我的情况下,我有两个参数,我需要"找到".我尝试了类似的东西find(coords(:,1)<=4 && coords(:,2)<=8),但由于操作数&&不是标量,这不起作用.关于如何做到这一点的任何想法将非常感谢!
&&并且||只能用于标量比较,因为你已经注意到了.&并|在向量工作,虽然.请注意,您甚至不需要find:
idxUL = coords(:,1) <= 4 & coords(:,2) <=8;
idxUR = coords(:,1) > 4 & coords(:,2) <=8;
upperLeft = coords(idxUL,:);
upperRight = coords(idxUR,:); %# etc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2363 次 |
| 最近记录: |