2010-04-14 11 views
7

J'ai un tableau 3D, a, de forme dire a.shape = (10, 10, 10)Préserver les dimensions d'une tranche d'un Numpy tableau 3D

la découpe en tranches, les dimensions sont squeezed automatiquement:

a[:,:,5].shape = (10, 10)

Je d aiment préserver le nombre de dimensions mais aussi s'assurer que la dimension qui a été comprimée est celle qui montre 1 ie

a[:,:,5].shape = (10, 10, 1)

J'ai pensé Réaménager le tableau et en passant ndmin mais qui ajoute que les dimensions supplémentaires au début de la tuple de forme quel que soit l'endroit où la tranche provenait du tableau a.

Répondre

12
a[:,:,[5]].shape 
# (10,10,1) 

a[:,:,5] est un exemple de basic slicing.

a[:,:,[5]] est un exemple de integer array indexing - combined with basic slicing. Lors de l'utilisation de l'indexation de tableaux entiers, la forme résultante est toujours "identical to the (broadcast) indexing array shapes". Depuis [5] (sous la forme d'un tableau) a la forme (1,), a[:,:,[5]] finit en ayant la forme (10,10,1).

+0

Merci, cependant, je dois ajouter que j'implémente une méthode '__getitem__' et donc je suis réticent à modifier les arguments de tranche - voir les règles d'indexation – Brendan

+1

numpy sont assez compliquées. Créer un '__getitem__' qui modifie ces règles peut poser des problèmes. Ne vaudrait-il pas mieux demander aux utilisateurs de votre objet de comprendre les règles de numpy et de passer l'index correct? – unutbu

+0

Très bien, cela vous dérangerait-il de nous indiquer la partie de la documentation qui explique ce comportement? –