MATLAB:查找与排序操作相对应的排列矩阵

时间:2014-04-27 15:17:01

标签: matlab sorting permutation

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

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

2 个答案:

答案 0 :(得分:2)

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

%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

答案 1 :(得分:1)

使用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