Maison  >  Article  >  développement back-end  >  Comment indexer un tableau NumPy 2D à l'aide de deux listes d'index, et quelles sont les solutions aux problèmes de diffusion ?

Comment indexer un tableau NumPy 2D à l'aide de deux listes d'index, et quelles sont les solutions aux problèmes de diffusion ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 15:06:02746parcourir

How can I index a 2D NumPy array using two lists of indices, and what are the solutions to broadcasting issues?

Indexation d'un tableau Numpy 2D avec 2 listes d'indices

Dans NumPy, il existe différentes manières d'indexer un tableau 2D en utilisant deux des listes d'index, une pour les lignes et une pour les colonnes. Explorons ces méthodes et abordons le problème de la diffusion.

Utilisation de la diffusion avec des tableaux d'indexation

Pour indexer un tableau 2D, x, à l'aide de deux tableaux d'indexation, row_indices et col_indices, vous pouvez simplement utiliser le syntaxe suivante :

<code class="python">x_indexed = x[row_indices, col_indices]</code>

Cependant, cela peut rencontrer une erreur de diffusion si les formes de row_indices et col_indices ne sont pas compatibles pour la diffusion. Pour surmonter cela, vous pouvez utiliser np.ix pour gérer la diffusion.

<code class="python">x_indexed = x[np.ix_(row_indices, col_indices)]</code>

Utilisation de masques booléens

Vous pouvez également utiliser des masques booléens pour la sélection de lignes et de colonnes. Créez deux masques booléens, row_mask et col_mask, où True représente les éléments à sélectionner.

Ensuite, vous pouvez utiliser la syntaxe suivante :

<code class="python">x_indexed = x[row_mask, col_mask]</code>

Exemple :

Donné x, row_indices et col_indices :

<code class="python">x = np.random.randint(0, 10, size=(5, 8))
row_indices = [2, 1, 4]
col_indices = [3, 7]

# Using broadcasting with indexing arrays
x_indexed_broadcasting = x[np.ix_(row_indices, col_indices)]

# Using boolean masks
row_mask = np.array([False] * 5, dtype=bool)
row_mask[[2, 1, 4]] = True
col_mask = np.array([False] * 8, dtype=bool)
col_mask[[3, 7]] = True
x_indexed_masks = x[row_mask, col_mask]

print(x_indexed_broadcasting)
print(x_indexed_masks)</code>

Sortie :

Les deux approches donnent le même résultat :

[[4 7]
 [7 7]
 [2 1]]

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