Sort and Compare elements in a row matrix to form a new one

I have the following row matrix (1x8):
Α = [ 1 0 0 1 0.5 0.4 0.5 0.4 ]
and I want to create a new matrix Β which contains the 5 elements of A with the higher values in a descending order:
Β = [ 1 1 0.5 0.5 0.4 ]
In the current example, A(6)=A(8)=0.4, so in this case I want to randomly choose which of these 2 elements will continue to form B and not neccesary take the one with the smaller index number (i.e A(6) instead of A(8)). If we assume that we don't know the elements of matrix A then we have to sort them and compare them before we form B. Can anyone share with me the appropriate code ?
Any help could be useful. Thanks in advance!

 Accepted Answer

I don't understand that bit: A(6)=A(8)=0.4, so in this case I want to randomly choose which of these 2 elements will continue to form B. Since they are the same value, chosing one at random or not does not matter, you always get the same value.
A = [1 0 0 1 0.5 0.4 0.5 0.4];
B = sort(A, 'descend');
B = B(1:5)

6 Comments

in this exaple it doen't really matter but in my algorithm does. That's why I want to choose randomly.
In any example, choosing one value at random out of several identical values just give you that one unique value. There must be something you're not telling, perhaps you also want the original indices?
The values in matrix A are priority values and each of them corresponds to an element in another matrix. So, they may have the same priority value (0.4) but not the same value in the element that they correspond
So, you also want the indices of the original values (2nd output of sort). You've not mentioned that so far.
Here is one way:
A = [1 0 0 1 0.5 0.4 0.5 0.4 0.3 0.4 0.2 0.4];
[B, idx] = sort(A, 'descend'); %sort in descending order as normal
lastindices = idx(B == B(5)); %get indices for element equals to B(5)
idx(B == B(5)) = lastindices(randperm(numel(lastindices))); %and shuffle randomly
B = B(1:5)
idx = idx(1:5)
Thanks a lot for the help Guillaume !

Sign in to comment.

More Answers (0)

Categories

Community Treasure Hunt

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

Start Hunting!