自动测试两个矩阵之间的列相等

时间:2016-03-10 04:31:34

标签: arrays matlab matrix

我有两个矩阵:

X =

     1     2     3
     4     5     6
     7     8     9

`Y` =

     1    10    11
     4    12    13
     7    14    15

我知道如果我想在XY中找到特定元素的索引,我可以使用函数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

但我怎么能以其他方式做到这一点?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用bsxfunpermute

执行此操作
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