Lorsque le séparateur de casier est dans ndarray: bin_edges
dans l'ordre croissant, dans quel casier la valeur x
est
get_bin_idx.py
bin_idx = np.where((bin_edges[:-1] <= x) & (x < bin_edges[1:]))[0][0]
Obtenu à.
Postscript (2016/03/16):
get_bin_idx2.py
bin_idx = np.searchsorted(bin_edges, x) - 1
Mais vous pouvez faire de même (grâce à termoshtt).
Postscript (02/01/2017): plus loin
get_bin_idx3.py
bin_idx = np.digitize(x, bin_edges) - 1
Mais vous pouvez faire de même.
En fait, selon la documentation Numpy, l'implémentation de np.digitize ()
semble être np.searchsorted ()
lui-même.
Ces différences sont simplement supposées être utilisées dans «np.digitize (x, bin_edges)» pour «trouver l'index du bac lorsque chaque élément de« x »est assigné au bac défini par« bin_edges »». D'autre part, «np.searchsorted (y, x)» est censé être utilisé pour «trouver l'index lors de l'insertion de chaque élément de« x »dans le tableau trié« y »». Il semble.
Faites un bac approprié avec des nombres aléatoires
gen_bins.py
bin_edges = np.hstack(([0., 1.], np.random.rand(9)))
bin_edges.sort()
Pour illustrer la relation entre la valeur de 0 <x <1 et le bac
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')
Pour savoir dans quelle case entrer pour un x approprié
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')
Encore une fois avec un autre 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')
c'est tout.
Recommended Posts