Obtendo Number of samples, -20, must be non-negative.
ao tentar construir um histograma do meu conjunto de dados.
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")
Aqui está my_data.csv
O número de amostras, -20, deve ser não negativo.
1.16.4 3.7.4 (padrão, 13 de agosto de 2019, 20:35:49)
[GCC 7.3.0]
Curiosamente, quando eu converto este conjunto de dados em flutuante, o histograma está sendo construído sem problemas
Obrigado pelo relatório do bug. Posso confirmar que esse bug existe no branch master também.
Devs NumPy: O problema é que existe uma função interna, _hist_bin_sturges
em histograms.py
, que usa o método ptp
para calcular a diferença do máximo e mínimo de um array com dtipo int16
. Nesse caso, o máximo é 32767 e o mínimo é -16, de modo que a diferença deve ser 32783. Mas ptp
retorna um valor com o mesmo tipo da matriz, portanto, retorna -32753, o que resulta no cálculo incorreto.
Poderíamos corrigir isso substituindo x.ptp()
por algo como x.max().item() - x.min().item()
.
A maioria dos outros estimadores de bin tem o mesmo problema com x.ptp()
.
Uma possível correção está em https://github.com/numpy/numpy/pull/14381.
Comentários muito úteis
Obrigado pelo relatório do bug. Posso confirmar que esse bug existe no branch master também.
Devs NumPy: O problema é que existe uma função interna,
_hist_bin_sturges
emhistograms.py
, que usa o métodoptp
para calcular a diferença do máximo e mínimo de um array com dtipoint16
. Nesse caso, o máximo é 32767 e o mínimo é -16, de modo que a diferença deve ser 32783. Masptp
retorna um valor com o mesmo tipo da matriz, portanto, retorna -32753, o que resulta no cálculo incorreto.Poderíamos corrigir isso substituindo
x.ptp()
por algo comox.max().item() - x.min().item()
.