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

Comment indexer un tableau Numpy par un autre ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-12 02:24:01599parcourir

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]

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

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)

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

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