Suppose I have the following matrix:
01 02 03 06
03 05 07 02
13 10 11 12
32 01 08 03
And I want the indices of the top 5 elements (in this case, 32, 13, 12, 11, 10). What is the cleanest way to do this in MATLAB?
Suppose I have the following matrix:
01 02 03 06
03 05 07 02
13 10 11 12
32 01 08 03
And I want the indices of the top 5 elements (in this case, 32, 13, 12, 11, 10). What is the cleanest way to do this in MATLAB?
There are a couple ways you can do this depending on how you want to deal with repeated values. Here's a solution that finds indices for the 5 largest values (which could include repeated values):
[sortedValues,sortIndex] = sort(A(:),'descend'); %# Sort the values in
%# descending order
maxIndex = sortIndex(1:5); %# Get a linear index into A of the 5 largest values
Here's a solution that finds the 5 largest unique values, then finds all elements equal to those values:
sortedValues = unique(A(:)); %# Unique sorted values
maxValues = sortedValues(end-4:end); %# Get the 5 largest values
maxIndex = ismember(A,maxValues); %# Get a logical index of all values
%# equal to the 5 largest values