# findout the second largest element in each row and its location in a matrix

조회 수: 27 (최근 30일)
navan . 2015년 5월 20일
답변: Steven Lord . 2018년 10월 28일
I have a (3*5) matrix i.e A=[1 2 3 4 5, 6 7 9 8 10, 11 12 14 13 15], i would like to find out the second largest element in each row and its location in the matrix. i expect 2 outputs 1)second_maxvalue_A=[4,9,14] 2)location_of_second_maxval=[4,3,3]

댓글을 달려면 로그인하십시오.

### 채택된 답변

Guillaume 2015년 5월 20일
One possible way is to find the largest values, replace them with a very small value (-Inf) and search for the new largest values:
A=[1 2 3 4 5; 6 7 9 8 10; 11 12 14 13 15] %your example A was a single row
m = max(A, [], 2); %find the max in each row
A(bsxfun(@eq, A, m)) = -Inf; %replace the max(s) by -Inf
m = max(A, [], 2) %find the new max which is the second largest.
##### 댓글 수: 3이전 댓글 1개 표시이전 댓글 1개 숨기기
zahra najjar 2018년 10월 28일
Bruno Luong 2018년 10월 28일

댓글을 달려면 로그인하십시오.

### 추가 답변 (3개)

Steven Lord 2018년 10월 28일
If you're using release R2017b or later, use maxk.
##### 댓글 수: 0이전 댓글 -2개 표시이전 댓글 -2개 숨기기

댓글을 달려면 로그인하십시오.

Thomas Koelen 2015년 5월 20일
편집: Thomas Koelen 님. 2015년 5월 20일
Edit: seems like I misread second largest...
, should be ;.
A=[1 2 3 4 5; 6 7 9 8 10; 11 12 14 13 15];
[m,i] = max(A,[],2)
gives you:
m =
5
10
15
i =
5
5
5
example:
A=rand(3,5);
[m,i] = max(A,[],2)
gives:
0.8147 0.9134 0.2785 0.9649 0.9572
0.9058 0.6324 0.5469 0.1576 0.4854
0.1270 0.0975 0.9575 0.9706 0.8003
m =
0.9649
0.9058
0.9706
i =
4
1
4
##### 댓글 수: 3이전 댓글 1개 표시이전 댓글 1개 숨기기
Guillaume 2015년 5월 20일
Doesn't this find the second largest element in the matrix, rather than each row?
Secondly, if there are more than one element equal to the max, it still returns the max.
Guillaume 2015년 5월 20일
A generic way of finding the nth largest value of each row, if it exists:
function nl = nthlargestrow(m, n)
%m: a 2d matrix to search
%n: an integer
%nl: cell array containing the nth largest value of each row. If a row does not have n different values, the cell is empty
nl = cell(size(m, 1), 1);
u = cellfun(@unique, num2cell(m, 2), 'UniformOutput', false);
hasnelements = cellfun(@numel, u) >= n;
nl(hasnelements) = cellfun(@(row) row(end-n+1), u(hasnelements), 'UniformOutput', false)
end

댓글을 달려면 로그인하십시오.

Thorsten 2015년 5월 20일
A=[1 2 3 4 5; 6 7 9 8 10; 11 12 14 13 15];
% remove highest value in each row
sz = size(A);
[~, ind] = max(A, [], 2);
ind = ind + [0; cumsum(repmat(sz(2), [sz(1)-1 1]))];
A = A';
A(ind) = [];
A = reshape(A, [sz(2)-1 sz(1)])';
% find highest value in each row (i.e., second largest of original matrix)
[max2, ind2] = max(A, [], 2);

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!