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

1 vue (au cours des 30 derniers jours)
Konstantinos le 6 Fév 2015
Commenté : Konstantinos le 6 Fév 2015
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!
0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

Réponse acceptée

Guillaume le 6 Fév 2015
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 commentairesAfficher 4 commentaires plus anciensMasquer 4 commentaires plus anciens
Guillaume le 6 Fév 2015
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)
Konstantinos le 6 Fév 2015
Thanks a lot for the help Guillaume !

Connectez-vous pour commenter.

Catégories

En savoir plus sur Shifting and Sorting Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by