假设我有一个 (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 ];
获得一个逻辑向量(长度为 m)的最简单方法是什么,该向量指示 Q 中的哪些行(对于所有元素)与指定的行 r 相同?
在上面的示例中,应该是
[ 1 0 0 1 1 0 ];
假设我有一个 (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 ];
获得一个逻辑向量(长度为 m)的最简单方法是什么,该向量指示 Q 中的哪些行(对于所有元素)与指定的行 r 相同?
在上面的示例中,应该是
[ 1 0 0 1 1 0 ];
您可以ismember
在一行中使用并执行此操作:
>> ismember(Q,r,'rows')'
ans =
1 0 0 1 1 0
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
是的,还有一个转置运算符'
来匹配您想要的行输出
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
Easier way with 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)'