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?

War es hilfreich?

Lösung

Dies ist tatsächlich dokumentierte Verhalten von numpy.digitize():

Jeder Index i zurückgekehrt ist, so dass bins[i-1] <= x < bins[i] wenn bins ist monoton steigend oder bins[i-1] > x >= bins[i] wenn bins monoton abnimmt. Wenn die Werte in x sind über die Grenzen bins, 0 oder len(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])

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top