¿Cuál es una buena manera de bin valores numéricos en un cierto rango? Por ejemplo, supongamos que tengo una lista de valores y quiero ubicarlos en N bandejas por su rango. En este momento, hago algo como esto:asignando puntos a bandejas
from scipy import *
num_bins = 3 # number of bins to use
values = # some array of integers...
min_val = min(values) - 1
max_val = max(values) + 1
my_bins = linspace(min_val, max_val, num_bins)
# assign point to my bins
for v in values:
best_bin = min_index(abs(my_bins - v))
donde min_index devuelve el índice del valor mínimo. La idea es que puedas encontrar el bin en el que cae el punto al ver con qué bin tiene la menor diferencia.
Pero creo que esto tiene casos de bordes extraños. Lo que estoy buscando es una buena representación de contenedores, idealmente los que están semicerrados medio abierto (por lo que no hay manera de asignar un punto a dos contenedores), es decir
bin1 = [x1, x2)
bin2 = [x2, x3)
bin3 = [x3, x4)
etc...
lo que es una buena manera de hacer esto en Python, usando numpy/scipy? Aquí solo me preocupa el binning de valores enteros.
muchas gracias por su ayuda.
como nota al margen: estoy más que dispuesto a usar matplotlib además de scipy/numpy si tiene esta funcionalidad. Supongo que funciones como 'hist' deben hacer algo como esto, excepto que aquí no estoy buscando ningún trazado. – user248237dfsf