How to take the X smaller values of an array ?
    2 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 Shifting and Sorting Matrices 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!


