如何在Matlab中使用多个参数执行“查找”操作?

4

我正在寻找一种“向量化”以下代码的方法。也就是说,我想摆脱这个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 作为变量名(或者那可能是一个打字错误)。 - Jonas
使用Matlab的FEX Consolidator?http://www.mathworks.com/matlabcentral/fileexchange/8354 - bla
1个回答

7

&&|| 只能用于标量比较,正如您所注意到的那样。但是,&| 可以用于向量运算。请注意,您甚至不需要使用 find

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

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

@robguinness:我实现了你提出的修改,这个修改(在我看来)被错误地拒绝了。感谢你发现了这个问题! - Jonas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接