【问题标题】:Compare two matrices and get only same values per column in matlab比较两个矩阵并在matlab中每列仅获得相同的值
【发布时间】:2015-04-07 06:14:32
【问题描述】:

在 matlab 中我有两个不同的矩阵。

一个是例如 A =[34.5, 35.8, 24.5, 32.3; 23.4, 33.1, 31.2, 14.6];

第二个是: B =[34.5, 32.3; 36.7 23.4, 14.6, 65.1];

我想得到一个新的,每列只包含相同的值, 例如C =[34.5, 32.3; 23.4, 14.6];

矩阵 A 和 B 的列数不同。

有没有matlab的功能或者你能帮我解决这个问题吗?

【问题讨论】:

  • 所以,每行可能会出现不同数量的公共元素,所以您需要一个元胞数组作为输出,对吧?
  • @Divakar 对不起,我的意思是列而不是行!我编辑了我的问题。
  • 这个intersect(A.',B.','rows','stable').'怎么样?
  • @Divakar 谢谢,就是这样!然后我只是将列转换为行。
  • 是的,这是在里面完成的。此外,您可能会发现这很有用 - Faster alternative to INTERSECT with 'rows' - MATLAB

标签: matlab matrix


【解决方案1】:

这种基于diff 的方法可能更有效 -

%// Concatenate A and B
AB = sortrows([A B].')  %//'

%// Use DIFF to get a logical array of repetitions and 
%// use that to select elements from AB
out = unique(AB([false ; ~any(diff(AB,[],1),2)],:),'rows').'

你可以用这样的东西替换最后一行 -

out = AB(strfind([false ; ~any(diff(AB,[],1),2)].',[0 1]),:).'

对于一个优雅的解决方案,我认为 cmets 中建议的基于 intersect 的解决方案可能适合 -

out = intersect(A.',B.','rows','stable').'

【讨论】:

    【解决方案2】:

    你也可以使用:

    result = B(:,any(pdist2(A.', B.')==0, 1));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-30
      • 2017-10-27
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      相关资源
      最近更新 更多