Maison > développement back-end > Tutoriel Python > Comment indexer un tableau Numpy par un autre ?

Comment indexer un tableau Numpy par un autre ?

Mary-Kate Olsen
Libérer: 2024-11-12 02:24:01
original
700 Les gens l'ont consulté

How to Index One Numpy Array by Another?

Indexation d'un tableau par un autre dans Numpy

Considérons deux matrices, A et B , où A contient des valeurs arbitraires et B contient des indices d'éléments dans A. La tâche consiste à extraire des éléments de A en fonction des indices spécifiés par B. Cette indexation permet une récupération sélective d'éléments.

Solution utilisant l'indexation avancée :

L'indexation avancée de Numpy permet cette opération en utilisant l'expression :

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

Cette approche utilise une combinaison d'indices de ligne et d'indices de colonne récupérés de B pour récupérer des éléments dans A.

Solution utilisant l'indexation linéaire :

Une approche alternative implique l'indexation linéaire :

m, n = A.shape
out = np.take(A, B + n*np.arange(m)[:,None])
Copier après la connexion

Ici, m et n représentent les dimensions de A, et les opérations au sein de la fonction np.take() assurent une indexation correcte des éléments basée sur B.

Exemple :

Illustrons ces solutions avec un exemple :

import numpy as np

A = np.array([[2, 4, 5, 3],
              [1, 6, 8, 9],
              [8, 7, 0, 2]])

B = np.array([[0, 0, 1, 2],
              [0, 3, 2, 1],
              [3, 2, 1, 0]])

# Advanced indexing
result1 = A[np.arange(A.shape[0])[:,None], B]

# Linear indexing
m, n = A.shape
result2 = np.take(A, B + n*np.arange(m)[:,None])

print("Result using advanced indexing:")
print(result1)

print("Result using linear indexing:")
print(result2)
Copier après la connexion

Sortie :

Result using advanced indexing:
[[2 2 4 5]
 [1 9 8 6]
 [2 0 7 8]]

Result using linear indexing:
[[2 2 4 5]
 [1 9 8 6]
 [2 0 7 8]]
Copier après la connexion

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 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