假设M
是一个矩阵,其中每一行代表一个N
个对象池的随机序列,例如,
1 2 3 4
3 4 1 2
2 1 3 4
如何在数字A
之前有效地查找数字B
的所有行?
,例如,A=1
和B=2
;我想要检索第一行和第二行(1
之前的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