How to take the X smaller values of an array ?

4 visualizaciones (últimos 30 días)
Hidir ABAY
Hidir ABAY el 27 de Jul. de 2016
Respondida: Paxorus Sahay el 27 de Jul. de 2016
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.

Respuesta aceptada

Adam
Adam el 27 de Jul. de 2016
Editada: Adam el 27 de Jul. de 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.
  1 comentario
Hidir ABAY
Hidir ABAY el 27 de Jul. de 2016
Thank you very much I exactly understand what you said.

Iniciar sesión para comentar.

Más respuestas (1)

Paxorus Sahay
Paxorus Sahay el 27 de Jul. de 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);

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by