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

57 views (last 30 days)

Show older comments

##### 0 Comments

### Accepted Answer

Guillaume
on 20 May 2015

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 Comments

Bruno Luong
on 28 Oct 2018

zahra najja: Please read the other ANSWERS bellow, or even better the DOC of MIN

### More Answers (3)

Thomas Koelen
on 20 May 2015

Edited: Thomas Koelen
on 20 May 2015

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 Comments

Guillaume
on 20 May 2015

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
on 20 May 2015

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);

##### 0 Comments

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!