Matrix 常用元素Matlab的列式比较

Matrix 常用元素Matlab的列式比较,matrix,compare,elements,Matrix,Compare,Elements,如何按列比较两个矩阵;并查找对应列中是否有公共元素,返回列号(注意:元素不需要在对应位置) 函数:bsxfun(@eq,A,B)在这里不有用,因为它比较列中的相应元素 要求:A=[1 2 3;4 5 6;7 8 9],B=[0 0;8 7 9;4 1 6]这里值4在A和B的列1中是公共的;类似地,A&B第3列中的值6,9也很常见;所以返回第1列和第3列 你能推荐一种方法吗;非常感谢。您可以使用ismember来比较您描述的列(或行)。它返回a的逻辑索引,指示B中的匹配项。使用any按列减少,使用

如何按列比较两个矩阵;并查找对应列中是否有公共元素,返回列号(注意:元素不需要在对应位置)

函数:bsxfun(@eq,A,B)在这里不有用,因为它比较列中的相应元素

要求:A=[1 2 3;4 5 6;7 8 9],B=[0 0;8 7 9;4 1 6]这里值4在A和B的列1中是公共的;类似地,A&B第3列中的值6,9也很常见;所以返回第1列和第3列


你能推荐一种方法吗;非常感谢。

您可以使用
ismember
来比较您描述的列(或行)。它返回a的逻辑索引,指示B中的匹配项。使用
any
按列减少,使用
find
获取列索引

您可以在列上使用for循环或使用
arrayfun

find(arrayfun(@(c) any(ismember(A(:,c), B(:,c))), 1:size(A,2)))

我很想知道你是否能找到一个更简洁的解决方案

谢谢你的建议,这样更有效率。我的计划是旋转每一行(“行”的次数)并检查是否相等(即1或0),然后返回列号。对于c=0:2,s=circshift(B,[c0]),d=bsxfun(@eq,s,A)[maxValue d]=max(d,[],2)min_count=min(d)。