"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment extraire des éléments d'un tableau 2D Numpy en utilisant des indices d'un autre tableau?

Comment extraire des éléments d'un tableau 2D Numpy en utilisant des indices d'un autre tableau?

Publié le 2025-03-25
Parcourir:510

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

Extraction d'éléments d'un tableau 2D utilisant des 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 arrette. Ce scénario survient 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 de numpy:

A = np.array([[0, 1], [2, 3], [4, 5]])
B = np.array([[1], [0], [1]])  # Index array

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. La sortie attendue doit être:

C = np.array([[1], [2], [5]])

Solutions:

1. Indexage du tableau purement entier:

A[np.arange(A.shape[0]), B.ravel()]

Cette méthode implique l'utilisation de capacités d'indexation du tableau entier de Numpy. Il génère une gamme d'indices correspondant aux lignes de A et le combine avec le tableau B aplati pour sélectionner les éléments appropriés.

2. Transpose et np.choose:

np.choose(B.ravel(), A.T)

Dans cette approche alternative, vous transposez un pour correspondre à la forme de B puis utilisez np.choose pour sélectionner les éléments souhaités basés sur la bradlate brade. Itérable déballage (python> = 3.6):

* a = a.t C = np.array ( [i] pour i dans b.ravel ())

Cette méthode utilise un déballage itérable pour convertir une liste de lignes puis itérate sur les lignes de A basée sur les indices en b pour extraire les éléments souhaités. Liste des compréhensions et de la radiodiffusion:
*A = A.T
C = np.array([*zip(*A)][i] for i in B.ravel())

[a [i] [j] pour i, j dans zip (range (a.shape [0]), b.ravel ())]

Liste des compréhensions de l'élément sélection.

5. Indexation de fantaisie (Numpy> = 1.18):
*A = A.T
C = np.array([*zip(*A)][i] for i in B.ravel())

a [np.stack ([plage (a.shape [0]), b.ravel ()], axe = 1)]

indexation sophistiquée permet des opérations d'indexation plus efficaces et 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 à partir d'un. La solution la plus appropriée dépend des exigences et des contraintes spécifiques de la tâche, telles que l'efficacité, la lisibilité et la compatibilité avec les versions plus anciennes de Numpy.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3