Arrays 两个矩阵列相等性的自动测试
我有两个矩阵:Arrays 两个矩阵列相等性的自动测试,arrays,matlab,matrix,Arrays,Matlab,Matrix,我有两个矩阵: X = 1 2 3 4 5 6 7 8 9 `Y` = 1 10 11 4 12 13 7 14 15 rowsX = ismember(X.', Y.', 'rows') rowsX = 1 0 0 我知道如果我想在X或Y中查找特定元素的索引,我可以使用函数find。例如: index_3=find(X==
X =
1 2 3
4 5 6
7 8 9
`Y` =
1 10 11
4 12 13
7 14 15
rowsX = ismember(X.', Y.', 'rows')
rowsX =
1
0
0
我知道如果我想在X
或Y
中查找特定元素的索引,我可以使用函数find
。例如:
index_3=find(X==3)
我想要的是,如果X
中的列也出现在Y
中,则以非常自动的方式查找或搜索。换句话说,我需要一个函数,它可以告诉我X
中的一列是否等于Y
中的一列。事实上,要尝试这一点,可以使用函数ismember
,它确实有一个可选的标志来比较行:
rowsX = ismember(X, Y, 'rows');
因此,获取列的一种简单方法就是对两个矩阵进行转置:
X =
1 2 3
4 5 6
7 8 9
`Y` =
1 10 11
4 12 13
7 14 15
rowsX = ismember(X.', Y.', 'rows')
rowsX =
1
0
0
但我怎么能以其他方式做到这一点呢
任何帮助都将不胜感激 您可以使用和:
与
这给
rowsX =
1 0 0
它的工作原理
permute
“沿垂直轴旋转Y
90度”,因此Y
列与X
列保持对齐,但Y
行移动到第三维。使用bsxfun
测试是否相等,并应用all(…,1)
给出一个矩阵,告诉X
的哪些列等于Y
的哪些列。然后any(…,3)
生成所需的结果:true
如果X
的列等于Y
的任何列 为什么说ismember(X',Y',rows')
不是自动的?o、 OSorry它是自动的,但我需要另一个函数,如果X中的一列也存在于Y中,则该函数可以直接为我提供“1”;如果不存在,则该函数为“0”。如果您的意思是要检查X中的一列是否存在于Y中,则可以执行if(any(ismember(X.),Y.,“rows'))…
any(ismember(X.),Y.,'rows')
将返回您的“0”或“1”。find(…)
在这种情况下起作用,因为在您的示例中,在Y中只找到X中的一列:[1 0]=ismember(…)
。因此,当您执行find([1 0 0])==1
时,您将得到一个输出。但是如果在X中有超过1列存在于Y中,那么您将使用find(..)=1再次返回向量。示例:find([1 0 1])==1
将为您提供[1 3]
。相关:。我仍然不确定您想要什么,这与ismember
解决方案不同。您是否可能只是想要colsX=rowsX.
?也许我把变量命名得很糟糕。:)