Maison >développement back-end >Tutoriel Python >Comment trouver des indices de lignes de valeurs multiples dans un tableau NumPy ?
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]])
La sortie souhaitée doit être :
[0, 3, 4]
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]
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]
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)]
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!