获取列中3个最大元素的行值

时间:2015-03-06 04:29:26

标签: matlab

我是Matlab的初学者,没有以前的经验。刚开始使用它,因为我别无选择。

因此,假设我有一个12行155列矩阵。我想遍历列,在途中对每个列进行排序。我发现了各种方法从矩阵中获取N个最大元素,但对我来说重要的不是元素的值,而是它最初出现的行索引。

例如:

栏:5,4,3,2,6,8,9,10,1,12,7,1

3个最大的元素是10,11和12.它们分别位于第8,10和12行。行的索引对我来说意义重大,这才是最重要的。

现在我有了这段代码,据说设置了一个for循环来遍历整个矩阵,C。

[rows,cols] = size(C);
for col = 1:cols
    for row = 1:rows
        %Sort the column in ascending order. Return 3 largest rows

    end
end 

有关如何实现这一目标的任何建议?提前感谢您的时间。

2 个答案:

答案 0 :(得分:2)

>> A = [2 4 5 12 3;7 2 7 4 8;2 7 4 8 2;3 7 2 9 5]

A =

 2     4     5    12     3
 7     2     7     4     8
 2     7     4     8     2
 3     7     2     9     5

>> [a,I] = sort(A);
>> I(1:3,:)

ans =

 1     2     4     2     3
 3     1     3     3     1
 4     3     1     4     4

答案 1 :(得分:2)

您可以对整个数组进行排序,也可以找到每列最多3次:

Original=randi(1000,20,5);
C=Original;   %// Make a copy because we're going to modify it
sizeC=size(C);
k=3;
maxIndices=[];
for n=1:k
   [~,Idx]=max(C);
   maxIndices(end+1,:)=Idx;
   C(sub2ind(sizeC,Idx,[1:numel(Idx)]))=-inf;
end

使用输入矩阵C

C =

   782   667   458   235   153
   220   170   902   475   968
   829   554   291   245   834
    60   355   120   670   165
   194   981   805   348    27
   632   939   215   198   405
   296   270    61   745   601
   695   956   190   564   593
    44   681   832   526   856
   420   560   891   955   126
   294   682   878   129   699
   184   470   332   915   883
   303   888   919   996    43
   392   572   284   836   839
   245   640   127   575    63
   996   156   296   558   746
   248   770    73   697   678
   675   522   541   255   891
   691   527   643    75   821
    92   111   426   887   327

输出是:

maxIndices =

   16    5   13   13    2
    3    8    2   10   18
    1    6   10   12   12

每列的最大值在第一行,第二行是第二行。

相关问题