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

42 visualizaciones (últimos 30 días)
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]

Respuesta aceptada

Guillaume
Guillaume el 20 de Mayo de 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 comentarios
Bruno Luong
Bruno Luong el 28 de Oct. de 2018
zahra najja: Please read the other ANSWERS bellow, or even better the DOC of MIN

Iniciar sesión para comentar.

Más respuestas (3)

Steven Lord
Steven Lord el 28 de Oct. de 2018
If you're using release R2017b or later, use maxk.

Thomas Koelen
Thomas Koelen el 20 de Mayo de 2015
Editada: Thomas Koelen el 20 de Mayo de 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 comentarios
Guillaume
Guillaume el 20 de Mayo de 2015
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
Guillaume el 20 de Mayo de 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

Iniciar sesión para comentar.


Thorsten
Thorsten el 20 de Mayo de 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);

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by