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

Comment trouver des indices de lignes de valeurs multiples dans un tableau NumPy ?

Barbara Streisand
Libérer: 2024-12-07 06:16:13
original
166 Les gens l'ont consulté

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

Trouver les index de lignes de plusieurs valeurs dans un tableau Numpy

Problème :

Nous reçoivent un tableau NumPy X et un ensemble de valeurs searched_values. L'objectif est de déterminer les indices de ligne dans X qui correspondent à chacune des valeurs dans searched_values.

Par exemple, pour les tableaux d'entrée suivants :

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 doit être :

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

Approche n°1 : diffusion NumPy

Ceci L'approche utilise la diffusion NumPy pour effectuer des comparaisons par éléments entre X et chaque ligne de valeurs recherchées :

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

Approche n°2 : conversion efficace en mémoire à l'aide de np.in1d

Pour économiser la mémoire, nous pouvons convertir chaque ligne de X et searched_values ​​en équivalents d'index linéaire, puis appliquer np.in1d ​​pour intersection :

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 : Conversion efficace en mémoire à l'aide de np.searchsorted

Une autre approche efficace en mémoire utilisant np.searchsorted et la même philosophie d'index linéaire conversion :

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

Compréhension np.ravel_multi_index

np.ravel_multi_index convertit chaque ligne de X en un équivalent d'index linéaire unique. Il fonctionne sur un tableau 2D d'indices à n dimensions et sur la forme de la grille à n dimensions sur laquelle ces indices doivent être mappés.

Par exemple, dans notre exemple, chaque ligne de X représente un tuple d'indexation pour une grille 2D avec des dimensions atténuées. np.ravel_multi_index mappe chacun de ces tuples à un index linéaire unique.

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