How to take the X smaller values of an array ?

1 visualizzazione (ultimi 30 giorni)
Hello everyone,
I have an array x (for example size(x)= 1, 10) and x=(1, 4, 100, 3, 14, 56, 8, 90, 23, 2).
My question is how can I keep the 6 smaller values of x without making a sort ? Because when I do a sort, it changes the place of the values.
For example if y is the output array I want that y=(1, 4, 3, 14, 8, 2)
Thanks for reading.

Risposta accettata

Adam
Adam il 27 Lug 2016
Modificato: Adam il 27 Lug 2016
[y,idx] = sort( x );
[~,idx2] = sort( idx(1:6) );
y = y( idx2 );
There may be a slightly more elegant way, but that does the job.

Più risposte (1)

Paxorus Sahay
Paxorus Sahay il 27 Lug 2016
This sliding insertion technique might be what you're looking for.
function [minima] = smallest(vec, n)
minima = vec(1:n);
[maxElem, idx] = findMax(minima);
for i = (n+1):length(vec)
if vec(i) < maxElem
minima(idx:end) = [minima(idx+1:end) vec(i)];
[maxElem, idx] = findMax(minima);
end
end
end
function [maxElem, firstIndex] = findMax(vec)
% assuming vec not empty
maxElem = max(vec);
allMatches = find(vec == max(vec));
firstIndex = allMatches(1);
end
Example usage:
x = [1, 4, 100, 3, 14, 56, 8, 90, 23, 2];
y = smallest(x, 6);

Categorie

Scopri di più su Shifting and Sorting Matrices in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by