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.
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')
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')
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')
das ist alles.
Recommended Posts