110 votes

Tranche d'index Numpy sans perdre les informations de dimension

J'utilise numpy et je souhaite indexer une ligne sans perdre les informations de dimension.

 import numpy as np
X = np.zeros((100,10))
X.shape        # >> (100, 10)
xslice = X[10,:]
xslice.shape   # >> (10,)  

Dans cet exemple, xslice est maintenant à 1 dimension, mais je veux qu'il soit (1,10). Dans R, j'utiliserais X [10,:, drop = F]. Y a-t-il quelque chose de similaire dans numpy. Je n'ai pas pu le trouver dans la documentation et je n'ai pas vu une question similaire posée.

Merci!

99voto

gnebehay Points 791

Une autre solution est de faire

 X[[10],:]

ou alors

 I = array([10])
X[I,:]

La dimensionnalité d'un tableau est préservée lorsque l'indexation est effectuée par une liste (ou un tableau) d'index. C'est bien car cela vous laisse le choix entre garder la dimension et serrer.

31voto

mindmatters Points 362

J'ai trouvé quelques solutions raisonnables.

1) utiliser numpy.take(X,[10],0)

2) utilisez cette étrange indexation X[10:11:, :]

Idéalement, cela devrait être la valeur par défaut. Je n'ai jamais compris pourquoi les dimensions sont jamais abandonnées. Mais c'est une discussion pour numpy ...

4voto

leilu Points 177

Pour ajouter à la solution d'indexation par listes ou tableaux par gnebehay, il est également possible d'utiliser des tuples:

 X[(10,),:]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X