找到其中A> B的行的有效方式

时间:2013-10-09 16:06:18

标签: performance matlab matrix

假设M是一个矩阵,其中每一行代表一个N个对象池的随机序列,例如,

1 2 3 4
3 4 1 2
2 1 3 4

如何在数字A之前有效地查找数字B的所有行?

,例如,A=1B=2;我想要检索第一行和第二行(1之前的2

2 个答案:

答案 0 :(得分:5)

你去了:

[iA jA] = find(M.'==A);
[iB jB] = find(M.'==B);
sol = find(iA<iB)

请注意,这是有效的,因为根据问题规范,每个数字都保证在每一行中出现一次。


要查找具有给定前缀的M行(在评论中请求):让prefix成为具有搜索前缀的向量(例如,prefix = [1 2]):

find(all(bsxfun(@eq, M(:,1:numel(prefix)).', prefix(:))))

答案 1 :(得分:1)

类似下面的代码应该有效。它会查看A是否在每行B之前。

temp = [1 2 3 4;
        3 4 1 2;
        2 1 3 4];
A = 1;
B = 2;
orderMatch = zeros(1,size(temp,1));
for i = 1:size(temp,1)
    match1= temp(i,:) == A;
    match2= temp(i,:) == B;
    aIndex = find(match1,1);
    bIndex = find(match2,1);
    if aIndex < bIndex
        orderMatch(i) = 1;
    end
end
solution = find(orderMatch);

这将导致[1,1,0],因为前两行在2之前有1,但第三行没有。

更新

在ordermatch上添加了find函数,以根据Luis

的建议给出行索引