numpy.digitize valores fuera de rango retornos?
-
08-10-2019 - |
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?
Solución
Este comportamiento es en realidad documentada de numpy.digitize()
:
Cada
i
índice devuelta es tal que sibins[i-1] <= x < bins[i]
bins
aumenta monotónicamente, o sibins[i-1] > x >= bins[i]
bins
se monótonamente decreciente. Si los valores enx
están más allá del límites debins
,0
olen(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])