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

Comment trouver efficacement des indices de ligne de valeurs spécifiques dans un tableau NumPy ?

Barbara Streisand
Libérer: 2024-12-07 17:22:13
original
716 Les gens l'ont consulté

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

Trouver l'index de valeurs spécifiques dans un tableau NumPy

Problème :

Étant donné un tableau X, déterminez les indices de ligne des valeurs spécifiées stockées dans searched_values. Par exemple, dans l'exemple suivant, nous recherchons les indices pour le. valeurs [4, 2], [3, 3] et [5, 6] dans le tableau X.

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

searched_values = np.array([[4, 2],
                            [3, 3],
                            [5, 6]])
Copier après la connexion

La sortie souhaitée serait :

[0, 3, 4]
Copier après la connexion

Solutions :

Approche 1 : NumPy La diffusion

est un moyen d'utiliser np.where et les fonctions de diffusion sont les suivantes.

np.where((X == searched_values[:, None]).all(-1))[1]
Copier après la connexion

Approche 2 : Conversion d'index linéaire efficace en mémoire

Comment convertir chaque ligne en un index linéaire unique à l'aide de np.ravel_multi_index de NumPy Il existe.

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 3 : Conversion d'index linéaire optimisée et efficace en mémoire

Le np.searchsorted de NumPy peut également être utilisé pour trouver rapidement des index linéaires.

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

Comment fonctionne np.ravel_multi_index :

np.ravel_multi_index crée une représentation d'index linéaire d'un index multidimensionnel. Interprétez chaque ligne comme un index dans un tableau multidimensionnel à n dimensions et générez l'index linéaire correspondant.

Par exemple, appliquer np.ravel_multi_index(X.T, dims) à un exemple de tableau X :

np.ravel_multi_index(X.T, dims)
# Output: array([30, 66, 61, 24, 41])
Copier après la connexion

Cela représente l'index linéaire de chaque ligne du tableau X. Cet index linéaire peut être utilisé pour identifier de manière unique chaque ligne du tableau.

L'exemple de code correspondant à chaque méthode est ci-dessous.

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

# Approach 2
dims = X.max(0) + 1
print(np.where(np.in1d(np.ravel_multi_index(X.T, dims),
                       np.ravel_multi_index(searched_values.T, dims)))[0])

# Approach 3
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()
print(sidx[np.searchsorted(X1D, searched_valuesID, sorter=sidx)])
Copier après la connexion

Vous pouvez facilement déterminer l'index de ligne d'une valeur particulière dans le tableau X en utilisant l'une ou l'autre approche.

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