【问题标题】:How to find the mapping after permutation of a 2-d matrix in Matlab如何在Matlab中对二维矩阵进行置换后找到映射
【发布时间】:2013-06-17 13:30:09
【问题描述】:

我有两个二维矩阵 A,B,其中 B 由 A 的(按行)排列产生。A 中有一些重复记录(B 中也是如此)。我想找到产生 B 的映射。我正在使用 Matlab。对我来说,只有一种解决方案就足够了。

示例:

A = [ 2 3 4; 4 5 6; 2 3 4];
B = [ 4 5 6; 2 3 4; 2 3 4];

映射将是:

p = [3 1 2]   // I want this mapping, however the solution p= [2 1 3] is also correct and acceptable

其中 A = B(p,:) 在 Matlab 中。 // 已编辑

问候

【问题讨论】:

  • 你是如何评价B的?
  • 我自己不产生B,但我知道它是通过置换A中的记录产生的。
  • 你可以访问它的排列方式吗?
  • 没有。这对我来说并不重要。我只想要排列,即上面示例中的 p。
  • 我之所以问,是因为如果您可以访问排列过程,它可能会使解决此问题的方法变得很多更容易。

标签: matlab matrix permutation repeat


【解决方案1】:

首先是低垂的果实。
假设有没有重复的行

 % compute the permutation matrix
 P = all( bsxfun( @eq, permute( A, [1 3 2]),permute(B,[3 1 2]) ), 3 );
 [~, p] = max(P, [], 2 ); % gives you what you want

如果有重复,我们需要在P的行/列中“打破平局”:

 n = size(A,1);
 bt = abs( bsxfun(@minus, 1:n, (1:n)' ) )/n; %//'
 [~, p] = max( P+bt, [], 2 );

【讨论】:

  • +1:很好的解决方案。我还建议在浮点值的情况下使用容差。
  • @EitanT 感谢您添加我忘记的bsxfun ;-) 太有趣了!
  • 请注意,可能有很多记录(例如 d=13 维度的 1000 条记录)。我认为该方法不适用于大型数据集!但是,我无法完全理解您的代码。
  • @RezaMortazavi (1) 当n 增长时,代码将受到影响。我相信它仍然适用于n=O(1000)。 (2) 没有重复的简单案例你看懂了吗?
  • 是的,感谢您的帮助。我也在寻找一种基于在 knnsearch 中实现的 kd-trees 的解决方案,但是重复记录又是问题所在。你觉得我可以用它来做案子吗?
【解决方案2】:

既然我们知道 A 和 B 总是有相同的行,那么让我们寻找一种转换,将每一行转换为一个共同的相同表示。 sort呢?

[As, Ai] = sortrows(A);
[Bs, Bi] = sortrows(B);

现在A(Ai,:) == B(Bi,:),所以我们要做的就是找到匹配 Ai 的 Bi 的索引。 Bi是正向映射,Ai是反向映射。所以:

p = zeros(size(A,1),1);
p(Ai) = Bi;

(答案已编辑以匹配问题陈述的编辑)

【讨论】:

    【解决方案3】:

    这是使用sort() 解决需要生成所有排列的问题的解决方案。

    这个想法是对AB 进行排序,这将产生相同的排序矩阵。现在可以使用产生两个排序矩阵的索引IAIB 找到排列。

    A = [ 2 3 4; 4 5 6; 2 3 4];
    B = [ 4 5 6; 2 3 4; 2 3 4];
    
    [CA,IA]=sort(A,1)
    [CB,IB]=sort(B,1)
    
    idxA = IA(:,1)
    idxB = IB(:,1)
    
    [~, idxB_inverse] = sort(idxB)
    
    idxA(idxB_inverse)
    

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 1970-01-01
      • 2013-07-03
      • 2013-06-18
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      相关资源
      最近更新 更多