Numpy: Le nombre d'échantillons dans l'histgramme est négatif avec bins = "auto"

Créé le 27 août 2019  ·  4Commentaires  ·  Source: numpy/numpy

Obtenir Number of samples, -20, must be non-negative. en essayant de créer un histogramme de mon ensemble de données.

Exemple de code de reproduction:

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

Message d'erreur:


Le nombre d'échantillons, -20, doit être non négatif.

Informations sur la version Numpy / Python:


1.16.4 3.7.4 (par défaut, 13 août 2019, 20:35:49)
[GCC 7.3.0]

00 - Bug numpy.lib

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

Tous les 4 commentaires

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.

Cette page vous a été utile?
0 / 5 - 0 notes