Numpy: Die Histogrammzahl der Proben ist mit bins = "auto" negativ.

Erstellt am 27. Aug. 2019  ·  4Kommentare  ·  Quelle: numpy/numpy

Erhalten von Number of samples, -20, must be non-negative. beim Versuch, ein Histogramm meines Datensatzes zu erstellen.

Beispiel für die Wiedergabe von Code:

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")

Hier ist my_data.csv

Fehlermeldung:


Die Anzahl der Proben (-20) darf nicht negativ sein.

Informationen zur Numpy / Python-Version:


1.16.4 3.7.4 (Standard, 13. August 2019, 20:35:49)
[GCC 7.3.0]

00 - Bug numpy.lib

Hilfreichster Kommentar

Danke für den Fehlerbericht. Ich kann bestätigen, dass dieser Fehler auch im Hauptzweig vorhanden ist.

NumPy-Entwickler: Das Problem ist, dass es eine interne Funktion gibt, _hist_bin_sturges in histograms.py , die die Methode ptp , um die Differenz zwischen Maximum und Minimum eines Arrays mit zu berechnen dtype int16 . In diesem Fall beträgt das Maximum 32767 und das Minimum -16, sodass die Differenz 32783 betragen sollte. ptp gibt jedoch einen Wert mit demselben Typ wie das Array zurück, sodass -32753 zurückgegeben wird falsche Berechnung.

Wir könnten das beheben, indem wir x.ptp() durch etwas wie x.max().item() - x.min().item() ersetzen.

Alle 4 Kommentare

Interessanterweise wird das Histogramm ohne Probleme erstellt, wenn ich diesen Datensatz in Float konvertiere

Danke für den Fehlerbericht. Ich kann bestätigen, dass dieser Fehler auch im Hauptzweig vorhanden ist.

NumPy-Entwickler: Das Problem ist, dass es eine interne Funktion gibt, _hist_bin_sturges in histograms.py , die die Methode ptp , um die Differenz zwischen Maximum und Minimum eines Arrays mit zu berechnen dtype int16 . In diesem Fall beträgt das Maximum 32767 und das Minimum -16, sodass die Differenz 32783 betragen sollte. ptp gibt jedoch einen Wert mit demselben Typ wie das Array zurück, sodass -32753 zurückgegeben wird falsche Berechnung.

Wir könnten das beheben, indem wir x.ptp() durch etwas wie x.max().item() - x.min().item() ersetzen.

Die meisten anderen Bin-Schätzer haben das gleiche Problem mit x.ptp() .

Eine mögliche Lösung finden Sie unter https://github.com/numpy/numpy/pull/14381.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

dmvianna picture dmvianna  ·  4Kommentare

Foadsf picture Foadsf  ·  3Kommentare

keithbriggs picture keithbriggs  ·  3Kommentare

Levstyle picture Levstyle  ·  3Kommentare

qualiaa picture qualiaa  ·  3Kommentare