在矩阵中查找匹配的行

red*_*ish 12 matlab

假设我有一个(mxn)矩阵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 ];
Run Code Online (Sandbox Code Playgroud)

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

在上面的示例中,应该是

[ 1 0 0 1 1 0 ];
Run Code Online (Sandbox Code Playgroud)

pet*_*hor 20

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

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

ans =

     1     0     0     1     1     0
Run Code Online (Sandbox Code Playgroud)


Gun*_*uyf 13

all(bsxfun(@eq, r, Q),2)'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

>> all(ans,2)'

ans =

   1     0     0     1     1     0
Run Code Online (Sandbox Code Playgroud)

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