Pregunta

Estoy utilizando el siguiente código para digitalizar una matriz en 16 contenedores:

numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])

I esperar que la salida está en el intervalo [1, 16], ya que hay 16 bins. Sin embargo, uno de los valores en la matriz devuelta es 17. ¿Cómo puede ser esto se explica?

¿Fue útil?

Solución

Este comportamiento es en realidad documentada de numpy.digitize():

Cada i índice devuelta es tal que si bins[i-1] <= x < bins[i] bins aumenta monotónicamente, o si bins[i-1] > x >= bins[i] bins se monótonamente decreciente. Si los valores en x están más allá del límites de bins, 0 o len(bins) se devuelve como sea apropiado.

Así pues, en su caso, 0 y 17 son también valores de retorno válidos (nota que la matriz bin devuelto por numpy.histogram() tiene longitud 17). Los contenedores devueltos por numpy.histogram() cubren el array.min() gama a array.max(). La condición dada en la documentación muestra que array.min() pertenece a la primera bin, mientras array.max() encuentra fuera de la última bin -. Por eso 0 no se encuentra en la salida, mientras que 17 es

Otros consejos

numpy.histogram() produce una matriz de la bin bordes , de los cuales hay (number of bins)+1.

En la versión 1.8 numpy., Usted tiene la opción de seleccionar si desea numpy.digitize a tener en cuenta el intervalo sea cerrado o abierto. A continuación se presenta un ejemplo (copiado de http: //docs.scipy. org / doc / numpy / referencia / generado / numpy.digitize.html )

x = np.array ([1.2, 10.0, 12.4, 15.5, 20.])

bins = np.array ([0,5,10,15,20])

np.digitize (x, bins, derecha = True )

array ([1, 2, 3, 4, 4])

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top