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

时间:2012-10-09 12:02:25

标签: matlab

我正在寻找一种“矢量化”以下代码的方法。也就是说,我想摆脱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

我首先尝试使用Matlab find函数(例如find(coords(k,1)<=4)),但在我的情况下,我有两个参数需要“查找”。我试过类似find(coords(:,1)<=4 && coords(:,2)<=8)的东西,但由于&&的操作数不是标量,所以这不起作用。关于如何做到这一点的任何想法将非常感激!

1 个答案:

答案 0 :(得分:7)

正如您所注意到的,

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

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

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