我有两个矩阵:
X =
1 2 3
4 5 6
7 8 9
`Y` =
1 10 11
4 12 13
7 14 15
我知道如果我想在X
或Y
中找到特定元素的索引,我可以使用函数find
。例如:
index_3 = find(X==3)
如果X
中的Y
中的列也出现,我想要的是以非常自动的方式查找或搜索。换句话说,我想要一个函数,可以告诉我X
中的列是否等于Y
中的列。实际上要尝试这个,可以使用函数ismember
,它确实有一个可选的标志来比较行:
rowsX = ismember(X, Y, 'rows');
因此获取列的一种简单方法就是采用两个矩阵的转置:
rowsX = ismember(X.', Y.', 'rows')
rowsX =
1
0
0
但我怎么能以其他方式做到这一点?
非常感谢任何帮助!
答案 0 :(得分:1)
rowsX = any(all(bsxfun(@eq, X, permute(Y, [1 3 2])), 1), 3);
使用
X = [ 1 2 3
4 5 6
7 8 9 ];
Y = [ 1 10 11
4 12 13
7 14 15 ];
这给出了
rowsX =
1 0 0
工作原理
permute
" Y
转90度"沿着垂直轴,因此Y
的列与X
的列保持对齐,但Y
的行被移动到第三维。使用bsxfun
测试相等性并应用all(...,1)
会生成一个矩阵,告知X
的哪些列等于Y
的哪些列。如果any(...,3)
的列等于true
的任何列,则X
会生成所需的结果:Y
。