0

マトリックスがあります:

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 

前もって感謝します。

4

1 に答える 1

4

"length" および "unique" 関数を使用すると、各列の異なる値の数 (ゼロを含む) を取得できます。次に例を示します。

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)
于 2012-12-01T20:02:27.613 に答える