在矩阵中查找匹配的行

时间:2012-05-09 10:58:37

标签: matlab

假设我有一个(m×n)矩阵Q和一个行向量r,例如

Q = [ 1 2 3 ; 4 2 3 ; 5 6 7 ; 1 2 3 ; 1 2 3 ; 1 2 5 ];

r = [ 1 2 3 ];

获取逻辑向量(长度为m)的最简单方法是什么,它指示Q中哪些行与指定行r相同(对于所有元素)?

在上面的示例中,应该是

[ 1 0 0 1 1 0 ];

4 个答案:

答案 0 :(得分:20)

您可以使用ismember并在一行中执行此操作:

>> ismember(Q,r,'rows')'

ans =

     1     0     0     1     1     0

答案 1 :(得分:13)

all(bsxfun(@eq, r, Q),2)'

bsxfun(@eq, r, Q)比较每一行并返回与Q相同大小的矩阵:

>> bsxfun(@eq, r, Q)

ans =

   1     1     1
   0     1     1
   0     0     0
   1     1     1
   1     1     1
   1     1     0

all函数计算bsxfun的结果是否分别沿着每一行都为真。因此它返回:

>> all(ans,2)'

ans =

   1     0     0     1     1     0

是的,还有一个转置运算符'来匹配您想要的行输出

答案 2 :(得分:1)

a = [1 1 1; 2 2 2; 3 3 3];
b = a(1:2,;);
[temp locb] = ismember(a,b,'rows');
b(locb(locb~=0),:)

ans =

     1     1     1
     2     2     2

答案 3 :(得分:0)

使用repmat更简单:

a = [1 2 3; 4 5 6; 7 8 9];
t = [4 5 6];
[x,y] = size(a);
r = all(a==repmat(t,y,1), 2)'