Matlab:按每列不同元素的大小对矩阵列进行排序

时间:2012-12-01 19:37:04

标签: matlab sorting

我们有一个矩阵:

Index:    1 2 3 4 5 6 

Elements:
          0 2 0 5 9 8 
          1 0 5 0 5 4
          0 1 0 0 6 0 

是否可以按每列不同元素的大小进行排序? 结果应该是这样的:

  Index:     5 2 6 1 3 4 

  Elements:
             9 2 8 0 0 5 
             5 0 4 1 5 0
             6 1 0 0 0 0 

提前谢谢。

1 个答案:

答案 0 :(得分:4)

使用“长度”和“唯一”功能,您可以检索每列的不同值的数量(包括零),例如:

for n=1:size(a,2)
  b(n)=length(unique(a(:,n)));
end

如果你想忽略零,可以使用

b(n)=sum(unique(a(:,n)) ~= 0);

给出一个数组,其中包含每列不同元素的数量:

b =    1     2     1     1     3     2

然后,您可以对此数组进行排序,并使用有序索引对矩阵进行排序:

[~, index]=sort(b, 'descend');
result = a(:, index)