我是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
有关如何实现这一目标的任何建议?提前感谢您的时间。
答案 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
每列的最大值在第一行,第二行是第二行。