2

私はMatlabでnx2行列を扱っていますが、私がやろうとしていることは原則としてかなり単純です。正方行列をランダムに生成し、一連の関数を実行して、mx2 行列を取得します。行に対して一意の関数を使用して、繰り返される行を削除すると、nx2 行列になります。私が問題を抱えているのは、このマトリックスをさらに縮小して、まったく同じエントリを持つ最初の列のすべてのエントリに対して、2 番目の列に最大数の行のみを保持することです。

ループを使用して最初の列の i 番目と (i+1) 番目のエントリをチェックし、値が最も高い行を 2 番目の列に格納していましたが、for ループを可能な限り回避しようとしています。

誰かアイデアや提案があれば教えてください!

例:

        0  0                            0  0     
        0  1                            0  1             0  3          
 A=     0  3   ---> unique(A, 'rows') = 0  3  --WANT-->  1  1
        1  0                            1  0             2  4
        1  0                            1  1
        0  0                            2  1
        2  1                            2  4    
        1  1                                                    
        2  4                                        
4

2 に答える 2

2

あなたが探しているものは次のとおりです。

[u,~,n] = unique(A(:,1));
B = [u, accumarray(n, A(:,2), [], @max)];
于 2013-06-28T07:33:10.690 に答える
1

問題の説明を正確に理解していませんsortrows()が、何かの助けになるようです。

于 2013-06-28T06:59:50.467 に答える