Comment extraire des éléments d'un tableau NumPy 2D à l'aide des indices d'un autre tableau ?

Linda Hamilton
Libérer: 2024-11-10 02:31:02
original
628 Les gens l'ont consulté

How to Extract Elements from a 2D NumPy Array Using Indices from Another Array?

Extraire des éléments d'un tableau 2D à l'aide d'indices d'un autre tableau

Dans NumPy, il devient parfois nécessaire d'extraire des éléments spécifiques d'un tableau multidimensionnel basé sur des indices stockés dans un autre tableau. Ce scénario se produit souvent lorsque vous travaillez avec des structures de données telles que des matrices clairsemées ou des sélections indexées.

Problème :

Considérez deux tableaux NumPy :

A = np.array([[0, 1], [2, 3], [4, 5]])
B = np.array([[1], [0], [1]])  # Index array
Copier après la connexion

Le but est d'extraire un élément de chaque ligne de A, où l'élément spécifique est spécifié par l'index dans la ligne correspondante de B. Le résultat attendu devrait être :

C = np.array([[1], [2], [5]])
Copier après la connexion

Solutions :

1. Indexation de tableaux purement entiers :

A[np.arange(A.shape[0]), B.ravel()]
Copier après la connexion

Cette méthode implique l'utilisation des capacités d'indexation de tableaux d'entiers de NumPy. Il génère une plage d'indices correspondant aux lignes de A et la combine avec le tableau B aplati pour sélectionner les éléments appropriés.

2. Transposition et np.choose :

np.choose(B.ravel(), A.T)
Copier après la connexion

Dans cette approche alternative, vous transposez A pour qu'il corresponde à la forme de B, puis utilisez np.choose pour sélectionner les éléments souhaités en fonction du tableau B aplati.

3. Déballage itérable (Python >=3.6) :

*A = A.T
C = np.array([*zip(*A)][i] for i in B.ravel())
Copier après la connexion

Cette méthode utilise le déballage itérable pour convertir A en une liste de lignes, puis parcourt les lignes de A en fonction des indices de B pour extraire les éléments souhaités.

4. Compréhensions de liste et diffusion :

[A[i][j] for i, j in zip(range(A.shape[0]), B.ravel())]
Copier après la connexion

Les compréhensions de liste peuvent être utilisées pour créer un nouveau tableau en itérant sur les éléments de A et B et en effectuant la sélection par élément.

5. Indexation sophistiquée (NumPy >=1.18) :

A[np.stack([range(A.shape[0]), B.ravel()], axis=1)]
Copier après la connexion

L'indexation sophistiquée permet des opérations d'indexation plus efficaces et plus compactes. Dans ce cas, il crée un tableau 2D avec les indices de ligne et les indices B, qui peuvent être utilisés pour sélectionner les éléments souhaités dans A.

La solution la plus appropriée dépend des exigences et contraintes spécifiques de la tâche, tels que l'efficacité, la lisibilité et la compatibilité avec les anciennes versions de NumPy.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!