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
Libérer: 2024-12-12 18:44:11
original
460 Les gens l'ont consulté

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]
Copier après la connexion

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]
Copier après la connexion

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)]
Copier après la connexion

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]])
Copier après la connexion

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]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal