[PYTHON] Zu wissen, in welchen Bin ein bestimmter Wert geht, wenn Sie ein Bin-Trennzeichen in ndarray haben

Zusammenfassung

Wenn sich die Bin-Separator-Werte in aufsteigender Reihenfolge in "ndarray: bin_edges" befinden, in welchem Bin sich der Wert "x" befindet

get_bin_idx.py


bin_idx = np.where((bin_edges[:-1] <= x) & (x < bin_edges[1:]))[0][0]

Erhalten bei.

Nachtrag (16.03.2016):

get_bin_idx2.py


bin_idx = np.searchsorted(bin_edges, x) - 1

Aber Sie können das Gleiche tun (dank termoshtt).

Nachtrag (02.01.2017): des Weiteren

get_bin_idx3.py


bin_idx = np.digitize(x, bin_edges) - 1

Aber Sie können das Gleiche tun. Tatsächlich scheint die Implementierung von "np.digitize ()" laut der Numpy-Dokumentation "np.searchsorted ()" selbst zu sein. Es wird einfach angenommen, dass diese Unterschiede in "np.digitize (x, bin_edges)" verwendet werden, um "den Index des Bin zu finden, wenn jedes Element von" x "dem durch" bin_edges "definierten Bin zugewiesen ist". Andererseits soll "np.searchsorted (y, x)" verwendet werden, um "den Index zu finden, wenn jedes Element von" x "in das sortierte Array" y "eingefügt wird". Es scheint.

Beispiel

Machen Sie einen geeigneten Behälter mit Zufallszahlen

gen_bins.py


bin_edges = np.hstack(([0., 1.], np.random.rand(9)))
bin_edges.sort()

Zur Veranschaulichung der Beziehung zwischen dem Wert 0 <x <1 und dem Bin

plot_bins.py


plt.step(bin_edges, np.arange(len(bin_edges)), where='post')
plt.ylim(-0.5, 9.5)
plt.xlabel('x')
plt.ylabel('Bin index')

bins.png

Um zu wissen, welcher Behälter für ein geeignetes x eingegeben werden soll

get_and_plot_bin_idx.py


x = np.random.rand()
bin_idx = np.where((bin_edges[:-1] <= x) & (x < bin_edges[1:]))[0][0]
plt.axvline(x, c='r')
plt.axhline(bin_idx, c='r')

bins2.png

Wieder mit einem anderen x

get_and_plot_bin_idx_again.py


x = np.random.rand()
bin_idx = np.where((bin_edges[:-1] <= x) & (x < bin_edges[1:]))[0][0]
plt.axvline(x, c='g')
plt.axhline(bin_idx, c='g')

bins3.png

das ist alles.

Recommended Posts

Zu wissen, in welchen Bin ein bestimmter Wert geht, wenn Sie ein Bin-Trennzeichen in ndarray haben
Wenn Sie in der for-Anweisung plt.save möchten
[Kleine Geschichte] Eine sorgfältige Maßnahme, wenn Sie vor dem Import in Python eine Funktion ausführen müssen
Wenn Sie eine Spalte spaltenweise durch einen fehlenden Wert (NaN) ersetzen möchten
[Python] Dinge, die überprüft werden müssen, wenn in Django ein Unicode-Dekodierungsfehler auftritt
Ich musste im Unterricht keinen Dekorateur schreiben. Danke Kontextmanager
Python Hinweis: Wenn Sie einer Zeichenfolge einen Wert zuweisen
Wie man sich erinnert, wenn man ein Wort vergisst