【问题标题】:MATLAB: Find permutation matrix that corresponds to a sorting operationMATLAB:查找对应于排序操作的置换矩阵
【发布时间】:2014-04-27 15:17:00
【问题描述】:

假设我有一些对角矩阵的非零元素我想从最小到最大排序,这样左上角的元素是最大的对角线,左下角的元素是最小的。有没有一种有效的方法可以找到对应于任何运算结果的置换矩阵?

这可以通过寻找一个置换矩阵来进一步简化列向量的行,以使它们按大小排序,但我仍然不知道一个好的解决方案。

【问题讨论】:

  • 您想要一个带有排序对角线的矩阵作为结果,还是想要一个排序后的列向量作为结果?如果你想要一个矩阵,我假设你的意思是“左上角元素是最大的对角线,而底部 right 元素是最小的”?
  • 是的,这是一个错误。右下角应该是最小的对角线。

标签: matlab sorting permutation


【解决方案1】:

提取对角线条目,找到与排序对应的索引,并使用这些索引将单位矩阵重新排列为置换矩阵。

%matrix size
N = 5;

%random diagonal matrix
d=rand(N,1);
D = diag(d);

%extract the diagonal entries of D and sort them
[~,I]=sort(diag(D));

%generate the permutation matrix
P = eye(size(D));
P = P(I,:)

%Verify answer P*D gives the sorted matrix
P*D

【讨论】:

    【解决方案2】:

    使用sort的两个输出:

    >> A = diag([8 3 4])
    A =
         8     0     0
         0     3     0
         0     0     4
    
    >> [sorted, sorting] = sort(diag(A))
    sorted =
         3
         4
         8
    
    sorting =
         2
         3
         1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      • 2012-10-25
      • 2023-03-23
      相关资源
      最近更新 更多