使用find搜索同一个数组

时间:2014-12-23 08:08:44

标签: arrays matlab

我在MATLAB做一个项目,我对find命令有疑问。

我有一个数组(maxes),其中包含存储在两列(时间和频率)中的数据。每行代表一个点的频率 - 时间对。

我想对那些满足特定条件的值进行配对(它的频率差异不超过32个单位,并且它的时间差异不超过64个)。我曾想过使用find命令,但我不知道如何让它在同一个数组中搜索巧合。可能吗?我该怎么办?

如果我没有清楚地解释我的目标(对不起,如果我的英语不好,这不是我的母语),我留下我执行该部分所做的代码。它工作得很好,但它使用了两个for循环,我想知道如何使用find命令更有效地工作。

for i = 1:length(maxes)-1
    f1 = maxes(i,1);
    t1 = maxes(i,2);
    for j = i+1:length(maxes)
        f2 = maxes(j,1);
        t2 = maxes(j,2);

        if((t2 - t1) < 64 && (t2 > t1))
            if(abs(f2 - f1) < 32)
                count = count+1;
                Lrow = [t1, f1, f2 - f1, t2 - t1]; 
                L(count,:) = Lrow;
            end
        else break;
        end
    end
end

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以使用meshgrid有效地解决此问题

[x1,x2]=meshgrid(maxes(:,1))
[y1,y2]=meshgrid(maxes(:,2))

xdiff=x1-x2
xind=find(xdiff<64)
xind=intersect(xind,find((x1-x2)>=0)

yind=find((y1-y2)<32)

ind=intersect(xind,yind)
Lrow=[x1(ind) y1(ind) x1-x2 y1-y2 ]

这应该可以解决问题。

相关问题