假设我有一些对角矩阵,其非零元素我想从最小到最大排序,因此左上角元素是最大对角线,左下角元素是最小元素。有没有一种有效的方法来找到与任何运算结果相对应的置换矩阵?
这可以通过寻找排列矩阵来进一步简化,以排列列向量的行,使得它们按大小排序,但我仍然不知道一个好的解决方案。
答案 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