Finding the position of the 1st,2nd and 3rd max value in a matrix
Mostrar comentarios más antiguos
Hi, I want to find the position of the 1st,2nd and 3rd maximum value of a matrix.I know that I can find the position of the max value using find() function like:(e.g. X is a matrix)
[i j]=find(X==max(X))
but it gives just the position of max value.
Thanks,
Amin.
2 comentarios
Walter Roberson
el 29 de Nov. de 2011
What do you want to have happen if there are duplicate copies of the maximum?
Amin
el 29 de Nov. de 2011
Respuesta aceptada
Más respuestas (5)
Sven
el 29 de Nov. de 2011
Hi Amin, try this:
[sortedX, sortedInds] = sort(X(:),'descend');
top3 = sortedInds(1:3)
And if you want to get the (i,j) reference into X, just follow with:
[i, j] = ind2sub(size(X), top3);
Here's a general solution (ala Jan) for the N maximum numbers that will be faster than sort() if you have a (very) large matrix X:
N = 10;
inds = zeros(N,1);
tmpX = X(:);
for i=1:N
[~, inds(i)] = max(tmpX);
tmpX(inds(i)) = -inf;
end
[rows, cols] = ind2sub(size(X), inds);
Note that in my opinion, I'd need X be very large or my calculation to be performed many times in a loop before I'd consider the (simpler) sort() method to be too inefficient.
1 comentario
Yupeng Zhang
el 13 de Sept. de 2021
Very good!
Edwin Fonkwe
el 29 de Nov. de 2011
1 voto
You could run the "find()" function three times. After each time, replace the previously found max in the matrix by a very small number (probably less than the minimum). Hope this helps
2 comentarios
Walter Roberson
el 29 de Nov. de 2011
if it was a floating point array, you could replace it with NaN instead of a small number.
Amin
el 29 de Nov. de 2011
function [U, I] = Xmax(X, i) % i is the x-largest value
for j = 1: i-1
[U, I] = max(X);
X(I) = -Inf;
[U, I] = max(X);
end
after each round you find and change the maximum number to -Inf
Niño Dong Won Shin
el 6 de Oct. de 2020
sampleData = ["Samsung Note 9","59","53900";
"Samsung S20 Ultra","150","69900";
"Samsung S10","200","55900";
"Samsung Note 10","46","54900";
"IPhone 11","45","40990"];
%Extract 1st Column
Item =
%Extract 2nd Column and make it as a vector array
Unit =
%Extract 3rd Column and make it as a vector array
UnitCost =
TotalCost =
%Search the most high priced item in the inventory and its current index
[max,index] =
searchMax =
% Tell user
Ishtiaq Khan
el 10 de Nov. de 2021
0 votos
The following would given you positions of all elements in one-dimentional array X. For a matrix, you can do a little bit tweaking.
[~,idx] = sort(X);
[~,idx]=sort(idx);
idx=numel(X)+1-idx;
Categorías
Más información sobre Logical en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!