Numpy: El número de muestras de histgram es negativo con bins = "auto"

Creado en 27 ago. 2019  ·  4Comentarios  ·  Fuente: numpy/numpy

Obteniendo Number of samples, -20, must be non-negative. al intentar construir un histograma de mi conjunto de datos.

Ejemplo de código de reproducción:

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

Mensaje de error:


El número de muestras, -20, no debe ser negativo.

Información de la versión de Numpy / Python:


1.16.4 3.7.4 (predeterminado, 13 de agosto de 2019, 20:35:49)
[GCC 7.3.0]

00 - Bug numpy.lib

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 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() .

Todos 4 comentarios

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

keithbriggs picture keithbriggs  ·  3Comentarios

inducer picture inducer  ·  3Comentarios

Kreol64 picture Kreol64  ·  3Comentarios

toddrjen picture toddrjen  ·  4Comentarios

MareinK picture MareinK  ·  3Comentarios