【问题标题】:How to perform a "find" in Matlab using multiple parameters?如何使用多个参数在 Matlab 中执行“查找”?
【发布时间】: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)&lt;=4)),但在我的情况下,我有两个参数需要“查找”。我尝试了类似find(coords(:,1)&lt;=4 &amp;&amp; coords(:,2)&lt;=8) 的方法,但是由于&amp;&amp; 的操作数不是标量,所以这不起作用。任何关于如何做到这一点的想法将不胜感激!

【问题讨论】:

标签: matlab


【解决方案1】:

&amp;&amp;|| 仅适用于标量比较,正如您所注意到的。不过,&amp;| 可以处理向量。请注意,您甚至不需要find

idxUL = coords(:,1) <= 4 & coords(:,2) <=8;
idxUR = coords(:,1) > 4 & coords(:,2) <=8;

upperLeft = coords(idxUL,:);
upperRight = coords(idxUR,:); %# etc

【讨论】:

  • @robguinness:我实施了您提议的编辑,但被(IMO 错误地)拒绝了。感谢您发现这一点!
猜你喜欢
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
相关资源
最近更新 更多