Maison >développement back-end >Tutoriel Python >Comment trouver efficacement les valeurs correspondant aux indices de ligne dans un tableau NumPy ?

Comment trouver efficacement les valeurs correspondant aux indices de ligne dans un tableau NumPy ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 18:06:12655parcourir

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

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

1. Comprendre le problème

Étant donné un tableau X et un tableau searched_values, la tâche consiste à trouver les indices des lignes de X qui correspondent aux lignes correspondantes dans searched_values.

2. Approche utilisant la diffusion NumPy

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

3. Approche efficace en mémoire utilisant np.ravel_multi_index et np.in1d

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]

4. Comprendre np.ravel_multi_index

np.ravel_multi_index convertit un tableau 2D d'indices à n dimensions en équivalents d'index linéaires. Par exemple, étant donné X et dims, il calculerait :

np.ravel_multi_index(X.T,dims)

Résultant en [30, 66, 61, 24, 41], où chaque nombre représente l'équivalent d'index linéaire de la ligne correspondante dans X.

5. Choisir des dimensions pour des indices linéaires uniques

Lors de la sélection des dimensions pour np.ravel_multi_index afin de générer des indices linéaires uniques, tenez compte des éléments suivants :

  • Chaque colonne du tableau d'entrée (X) représente un axe de la grille à laquelle est mappée.
  • Pour garantir des indices linéaires uniques, l'étirement maximal de chaque axe doit être pris en compte, qui est la valeur maximale dans chaque colonne plus 1.

Pour le X donné :

dims = X.max(0)+1 # [10, 7]

Cela créerait une grille avec au moins les dimensions spécifiées, garantissant des indices linéaires uniques.

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!

Déclaration:
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