2011-09-10 17 views

risposta

31

In aggiunta alle altre risposte, è possibile utilizzare anche affettare con numpy.newaxis:

>>> from numpy import zeros, newaxis 
>>> a = zeros((6, 8)) 
>>> a.shape 
(6, 8) 
>>> b = a[:, :, newaxis] 
>>> b.shape 
(6, 8, 1) 

O anche questo (che funziona con un numero arbitrario di dimensioni):

>>> b = a[..., newaxis] 
>>> b.shape 
(6, 8, 1) 
+5

In una nota a margine, 'numpy.newaxis' è semplicemente' None'. 'newaxis' è" solo "per la leggibilità. E 'pari a poco fare 'b = a [..., Nessuno]' (I puntini di sospensione permette anche di lavorare per gli array N-dimensionali, non solo gli array 2D.) –

+1

Vero. Per qualche motivo ho avuto l'impressione che '' newaxis' essendo none' era solo un dettaglio di implementazione (e quindi forse anche soggetto a modifiche in futuro), ma sembra che sia esplicitamente documentata. –

+0

Supponiamo che il terzo asse sia qualcosa di diverso da 1? per esempio. come si converte 'a' in be' b' con 'b.shape = (6,8,3)'? – Gathide

2
import numpy as np 

a= np.eye(3) 
print a.shape 
b = a.reshape(3,3,1) 
print b.shape 
6
numpy.reshape(array, array.shape + (1,)) 
+0

Grazie, ho usato un = A.reshape (A.shape + (1,)) – nobody

+2

Se sei felice di modificare 'A' in atto, si può semplicemente assegnare l'attributo shape: 'A.shape = A.shape + (1,)', o anche 'A.shape + = 1,'. –

Problemi correlati