Maison >développement back-end >Tutoriel Python >Comment trouver efficacement des indices de ligne de plusieurs valeurs dans un tableau NumPy ?

Comment trouver efficacement des indices de ligne de plusieurs valeurs dans un tableau NumPy ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-12 18:44:11536parcourir

How to Efficiently Find Row Indices of Multiple Values in a NumPy Array?

Comment trouver les index de ligne de plusieurs valeurs dans un tableau NumPy ?

NumPy propose plusieurs approches pour localiser les index de ligne de valeurs spécifiées dans un tableau NumPy :

Approche n°1 : NumPy Diffusion

result = np.where((X==searched_values[:,None]).all(-1))[1]

Approche n°2 : Approche efficace en mémoire avec np.ravel_multi_index

dims = X.max(0) + 1
out = np.where(np.in1d(np.ravel_multi_index(X.T,dims),\
                    np.ravel_multi_index(searched_values.T,dims)))[0]

Approche n°3 : Efficacité mémoire Approche avec np.searchsorted

dims = X.max(0) + 1
X1D = np.ravel_multi_index(X.T,dims)
searched_valuesID = np.ravel_multi_index(searched_values.T,dims)
sidx = X1D.argsort()
out = sidx[np.searchsorted(X1D,searched_valuesID,sorter=sidx)]

Comprendre np.ravel_multi_index

np.ravel_multi_index convertit les tuples d'indexation multidimensionnelle en indices linéaires pour une grille. Il suppose que chaque colonne représente une dimension et utilise la forme de la grille pour calculer les indices linéaires.

Par exemple, avec X :

X = np.array([[4, 2],
              [9, 3]])

et dims = [10, 7], la première ligne de X (4, 2) est converti en index linéaire 30. Cela correspond à la ligne 4 et à la colonne 2 du grille :

dims = X.max(0) + 1 # [10, 7]
np.ravel_multi_index(X.T, dims) # [30, 66]

Choisir les dimensions pour des indices linéaires uniques

Pour garantir des indices linéaires uniques, les dimensions de la grille doivent être définies sur l'étirement maximum de chaque axe de la tableau d'entrée X. Ceci peut être réalisé en ajoutant 1 à la valeur maximale de chaque colonne de X.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn