How do I find the index of the 2 maximum values of a 1D array in MATLAB? Mine is an array with a list of different scores, and I want to print the 2 highest scores.
I'll go for an O(k*n)
solution, where k
is the number of maximum values you're looking for, rather than O(n log n)
:
x = [3 2 5 4 7 3 2 6 4];
y = x; %// make a copy of x because we're going to modify it
[~, m(1)] = max(y);
y(m(1)) = -Inf;
[~, m(2)] = max(y);
m =
5 8
This is only practical if k
is less than log n
. In fact, if k>=3
I would put it in a loops, which may offend the sensibilities of some. ;)
You can use sort, as @LuisMendo suggested:
[B,I] = sort(array,'descend');
This gives you the sorted version of your array
in the variable B
and the indexes of the original position in I
sorted from highest to lowest. Thus, B(1:2)
gives you the highest two values and I(1:2)
gives you their indices in your array
.
To get the indices of the two largest elements: use the second output of sort to get the sorted indices, and then pick the last two:
x = [3 2 5 4 7 3 2 6 4];
[~, ind] = sort(x);
result = ind(end-1:end);
In this case,
result =
8 5