根据非零行数排序矩阵

Nov*_*per 3 matlab matrix

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

 a = [0 0 2;2 1 4;2 5 0]
Run Code Online (Sandbox Code Playgroud)

但应该是

a =

 2     1     4
 2     5     0
 0     0     2
Run Code Online (Sandbox Code Playgroud)

最后,这就是我想出的

 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)]
Run Code Online (Sandbox Code Playgroud)

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

dro*_*rco 7

您可以使用以下方法:

[~,I] = sort(sum(a~=0,2), 'descend');
a = a(I,:);
Run Code Online (Sandbox Code Playgroud)

结果:

 a =

 2     1     4
 2     5     0
 0     0     2
Run Code Online (Sandbox Code Playgroud)