[PYTHON] Pour savoir dans quel bac une valeur donnée entre lorsque vous avez un délimiteur de bac dans ndarray

Résumé

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.

Exemple

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')

bins.png

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')

bins2.png

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')

bins3.png

c'est tout.

Recommended Posts

Pour savoir dans quel bac une valeur donnée entre lorsque vous avez un délimiteur de bac dans ndarray
Lorsque vous voulez plt.save dans l'instruction for
[Petite histoire] Une mesure minutieuse lorsque vous devez exécuter une fonction avant l'importation en Python
Lorsque vous souhaitez remplacer une colonne par une valeur manquante (NaN) colonne par colonne
[Python] Choses à vérifier lorsqu'une erreur de décodage Unicode apparaît dans Django
Je n'ai pas eu besoin d'écrire décorateur en classe Merci contextmanager
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Comment se souvenir quand on oublie un mot