2011-09-10 15 views

Respuesta

31

Además de las otras respuestas, también puede utilizar rebanar 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 incluso este (que funcionará con un número arbitrario de dimensiones):

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

En una nota lateral, 'numpy.newaxis' es simplemente' None'. 'newaxis' es" solo "para ser legible. Es equivalente a simplemente hacer 'b = a [..., Ninguno]' (La elipsis también le permite funcionar para matrices N-dimensionales, no solo para matrices 2D.) –

+1

Verdadero. Por alguna razón, tuve la impresión de que 'newaxis' era' None' solo un detalle de implementación (y, por lo tanto, posiblemente sujeto a cambios en el futuro), pero parece que está documentado explícitamente. –

+0

Supongamos que quiere que el tercer eje sea algo distinto de 1? p.ej. ¿Cómo se convierte 'a' en' 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

Gracias, he usado A = A.reshape (A.shape + (1,)) – nobody

+2

Si está contento de modificar 'A' en su lugar, puede simplemente asignar a el atributo de forma: 'A.shape = A.shape + (1,)', o incluso 'A.shape + = 1,'. –

Cuestiones relacionadas