Obtenir Number of samples, -20, must be non-negative.
en essayant de créer un histogramme de mon ensemble de données.
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")
Voici my_data.csv
Le nombre d'échantillons, -20, doit être non négatif.
1.16.4 3.7.4 (par défaut, 13 août 2019, 20:35:49)
[GCC 7.3.0]
Il est intéressant de noter que lorsque je convertis cet ensemble de données en flottant, l'histogramme est en cours de construction sans problème
Merci pour le rapport de bogue. Je peux confirmer que ce bogue existe également dans la branche principale.
NumPy devs: Le problème est qu'il existe une fonction interne, _hist_bin_sturges
in histograms.py
, qui utilise la méthode ptp
pour calculer la différence entre le maximum et le minimum d'un tableau avec dtype int16
. Dans ce cas, le maximum est 32767 et le minimum est -16, donc la différence doit être 32783. Mais ptp
renvoie une valeur du même type que le tableau, donc il renvoie -32753, ce qui entraîne le calcul incorrect.
Nous pourrions corriger cela en remplaçant x.ptp()
par quelque chose comme x.max().item() - x.min().item()
.
La plupart des autres estimateurs bin ont le même problème avec x.ptp()
.
Un correctif possible est dans https://github.com/numpy/numpy/pull/14381.
Commentaire le plus utile
Merci pour le rapport de bogue. Je peux confirmer que ce bogue existe également dans la branche principale.
NumPy devs: Le problème est qu'il existe une fonction interne,
_hist_bin_sturges
inhistograms.py
, qui utilise la méthodeptp
pour calculer la différence entre le maximum et le minimum d'un tableau avec dtypeint16
. Dans ce cas, le maximum est 32767 et le minimum est -16, donc la différence doit être 32783. Maisptp
renvoie une valeur du même type que le tableau, donc il renvoie -32753, ce qui entraîne le calcul incorrect.Nous pourrions corriger cela en remplaçant
x.ptp()
par quelque chose commex.max().item() - x.min().item()
.