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

24 views (last 30 days)
okoth ochola on 26 Jan 2023
Answered: Arif Hoq on 26 Jan 2023
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]));
okoth ochola on 26 Jan 2023
thanks, it worked prfectly well

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

### Categories

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

R2016a

### Community Treasure Hunt

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

Start Hunting!