2

我正在使用 Matlab 中的 nx2 矩阵,而我正在尝试做的事情原则上相当简单。我随机生成一个方阵,通过一系列函数运行它,得到一个 mx2 矩阵。我在行上使用 unique 函数来消除重复的行,最终得到一个 nx2 矩阵。我遇到的麻烦是进一步减少这个矩阵,以便对于第一列中具有完全相同条目的所有条目,只保留第二列中具有最高数字的行。

我正在使用循环来检查第一列的第 i 个和第 (i+1) 个条目,并将具有最高值的行存储在第二列中,但我试图尽可能避免 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 回答