Numpy: O número de amostras do histograma é negativo com bins = "auto"

Criado em 27 ago. 2019  ·  4Comentários  ·  Fonte: numpy/numpy

Obtendo Number of samples, -20, must be non-negative. ao tentar construir um histograma do meu conjunto de dados.

Reproduzindo exemplo de código:

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

Mensagem de erro:


O número de amostras, -20, deve ser não negativo.

Informações sobre a versão Numpy / Python:


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

00 - Bug numpy.lib

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

Todos 4 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

qualiaa picture qualiaa  ·  3Comentários

navytux picture navytux  ·  4Comentários

Foadsf picture Foadsf  ·  3Comentários

thouis picture thouis  ·  4Comentários

kevinzhai80 picture kevinzhai80  ·  4Comentários