numpy.digitize kehrt Werte außerhalb des zulässigen Bereichs?
-
08-10-2019 - |
Frage
Ich bin mit dem folgenden Code ein Array in 16 Behälter zu digitalisieren:
numpy.digitize(array, bins=numpy.histogram(array, bins=16)[1])
Ich gehe davon aus, dass der Ausgang im Bereich [1, 16], da gibt es 16 Fächer. Allerdings ist einer der Werte in der zurückgegebenen Array ist 17. Wie kann das erklären?
Lösung
Dies ist tatsächlich dokumentierte Verhalten von numpy.digitize()
:
Jeder Index
i
zurückgekehrt ist, so dassbins[i-1] <= x < bins[i]
wennbins
ist monoton steigend oderbins[i-1] > x >= bins[i]
wennbins
monoton abnimmt. Wenn die Werte inx
sind über die Grenzenbins
,0
oderlen(bins)
als angemessen zurückgegeben.
So in Ihrem Fall 0
und 17
gelten auch Rückgabewerte (beachten Sie, dass der Behälter Array zurückgegeben von numpy.histogram()
Länge 17
hat). Die Behälter von numpy.histogram()
zurück decken den Bereich array.min()
zu array.max()
. Die in der Dokumentation zeigt gegebene Bedingung, dass array.min()
zu dem ersten Fach gehört, während array.max()
liegt außerhalb der letzten bin -., Deshalb 0
nicht in der Ausgabe ist, während 17
Andere Tipps
numpy.histogram()
eine Anordnung des Behälters erzeugt Kanten , von denen es (number of bins)+1
.
In numpy Version 1.8., Haben Sie die Möglichkeit zu wählen, ob Sie numpy.digitize wollen das Intervall berücksichtigen geschlossen oder geöffnet werden. Es folgt ein Beispiel (kopiert von http: //docs.scipy. org / doc / numpy / reference / erzeugt / numpy.digitize.html )
x = np.array ([1,2, 10,0, 12,4, 15,5, 20]).
Bins = np.array ([0,5,10,15,20])
np.digitize (x, Bins, rechts = True )
Array ([1, 2, 3, 4, 4])