Obteniendo Number of samples, -20, must be non-negative.
al intentar construir un histograma de mi conjunto de datos.
import numpy as np
my_data = np.loadtxt("my_data.csv", delimiter=',', dtype=np.int16)
n_base, bins_base = np.histogram(my_data, bins="auto")
Aquí está my_data.csv
El número de muestras, -20, no debe ser negativo.
1.16.4 3.7.4 (predeterminado, 13 de agosto de 2019, 20:35:49)
[GCC 7.3.0]
Curiosamente, cuando convierto este conjunto de datos en flotante, el histograma se está construyendo sin problemas
Gracias por reportar el error. Puedo confirmar que este error también existe en la rama maestra.
Desarrolladores de NumPy: El problema es que hay una función interna, _hist_bin_sturges
en histograms.py
, que usa el método ptp
para calcular la diferencia entre el máximo y el mínimo de una matriz con dtype int16
. En este caso, el máximo es 32767 y el mínimo es -16, por lo que la diferencia debe ser 32783. Pero ptp
devuelve un valor con el mismo tipo que la matriz, por lo que devuelve -32753, lo que da como resultado el cálculo incorrecto.
Podríamos solucionarlo reemplazando x.ptp()
con algo como x.max().item() - x.min().item()
.
La mayoría de los demás estimadores de bin tienen el mismo problema con x.ptp()
.
Una posible solución está en https://github.com/numpy/numpy/pull/14381.
Comentario más útil
Gracias por reportar el error. Puedo confirmar que este error también existe en la rama maestra.
Desarrolladores de NumPy: El problema es que hay una función interna,
_hist_bin_sturges
enhistograms.py
, que usa el métodoptp
para calcular la diferencia entre el máximo y el mínimo de una matriz con dtypeint16
. En este caso, el máximo es 32767 y el mínimo es -16, por lo que la diferencia debe ser 32783. Peroptp
devuelve un valor con el mismo tipo que la matriz, por lo que devuelve -32753, lo que da como resultado el cálculo incorrecto.Podríamos solucionarlo reemplazando
x.ptp()
con algo comox.max().item() - x.min().item()
.