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!