Picking array elements based their values (largest, second largest,...)

4 views (last 30 days)
Hi community. I have the following code which I intended to use to pick numbers from a matrix from the matrix based on their value such that, I can pick the largest, second largest and so forth. My problem is this, the code seems to waork only for a matrix with unique elements. In situations where the matrix has some repeated elements, the code returns wrong results. To some extent, I know where the problem is, my code first sort the numbers and arrange them in ascending order, then it picks values based on their positions pointed by the subsequent lines after sorting but not values anymore which is undesirable for me. When the code below is executed, it picks 7, 7 and 6 instead of 7, 6, 5. How can I instruct the code to pick the values based on their values and not positions after sorting. So that if the desired value is repeated, the code only pick it once and ignores the rest. Because with a large matrix it is impossible to look and correctly define the positions of the values as have done below. Am using R2016a. Please help. Thanks in advance.
Y=[1 1 0 0 6 5 4 7 7]
[ii,ii] = sort(Y);
Largest=Y(ii([end]));
Second_largest = Y(ii([end-1]));
Third_largest=Y(ii([end-2]));

Accepted Answer

Arif Hoq
Arif Hoq on 26 Jan 2023
Y=[1 1 0 0 6 5 4 7 7];
a=unique(Y);
[ii,ij] = sort(a,'descend');
Largest=ii(1)
Largest = 7
second_largest=ii(1+1)
second_largest = 6
third_largest=ii(1+2)
third_largest = 5

More Answers (0)

Categories

Find more on Shifting and Sorting Matrices in Help Center and File Exchange

Products


Release

R2016a

Community Treasure Hunt

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

Start Hunting!