根据非零行数排序矩阵

时间:2016-06-24 09:41:03

标签: matlab matrix

我想根据行中的多个非零元素对矩阵行进行排序,请考虑以下示例

 a = [0 0 2;2 1 4;2 5 0]

但是应该是

a =

 2     1     4
 2     5     0
 0     0     2

最后,这是我提出的

 for i = 1:3
    vec(i) = sum(a(i,:)==0);%to get number of nonzero elementsin each row
 end
 a = [a vec.']
 a = sortrows(a,4) % sorting according to number of nonzero elements 
 a = [a(:,1:3)]

上面的代码有效但有没有人有更优雅的方式?

1 个答案:

答案 0 :(得分:7)

您可以使用以下方法:

[~,I] = sort(sum(a~=0,2), 'descend');
a = a(I,:);

结果:

 a =

 2     1     4
 2     5     0
 0     0     2