How to take the X smaller values of an array ?
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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.
0 comentarios
Respuesta aceptada
Más respuestas (1)
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);
0 comentarios
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!