2010-03-01 17 views
23

Seguramente debe haber una forma de hacer esto ... No puedo resolverlo.numpy: ¿extiende matrices a lo largo de un nuevo eje?

Tengo una matriz (9,4), y quiero repetirla a lo largo de un tercer eje 4096 veces ... Entonces se vuelve simple (9,4,4096), con cada valor de la matriz de 9,4 simplemente repitió 4096 veces en el nuevo eje.

Si mi diagrama 3D dudosa tiene sentido (la diagonal es un eje z)

4| /off to 4096 
3|/
2|/
1|/_ _ _ _ _ _ _ _ _ 
    1 2 3 4 5 6 7 8 9 

Saludos

EDIT: Solo para aclarar, aquí se hace hincapié en el (9,4) array siendo REPETIDO para cada una de las 4096 'filas' del nuevo eje. Imagine una sección transversal: cada matriz original (9,4) es una de esas en el cuboide de 4096 de largo.

+0

'np.tile' es otra opción. Vea las respuestas a [esta pregunta] (http://stackoverflow.com/q/1721802/2623899). – dbliss

+0

También ha dibujado un diagrama para la matriz de 4 por 9. :) –

Respuesta

22

Aquí es una manera:

import scipy 
X = scipy.rand(9,4,1) 
Y = X.repeat(4096,2) 

Si X se le da a usted como única (9,4), entonces

import scipy 
X = scipy.rand(9,4) 
Y = X.reshape(9,4,1).repeat(4096,2) 
+1

Gracias de nuevo Steve, estaba confundido porque no me había dado cuenta de que tenía que cambiar la forma de la matriz antes de usar el método de repetición, no dejaba de decirme que estaba tratando de usar un eje que no estaba definido. Tiene sentido, aunque ahora. –

9

También puede depender de las normas de radiodifusión repetir relleno una matriz re-dimensionada:

import numpy 
X = numpy.random.rand(9,4) 
Y = numpy.resize(X,(4096,9,4)) 

Si no le gustan los ejes ordenados de esta manera, puede transponer:

Z = Y.transpose(1,2,0) 
5

pregunta es super viejo, pero aquí hay otra opción de todos modos:

import numpy as np 
X = np.random.rand(9,4) 
Y = np.dstack([X] * 4096) 
+0

En lugar de '[X for i in range (4096)]' puedes hacer '[X] * 4096'. – blubberdiblub

+0

Buena llamada, editado mi respuesta. – DavidS

Cuestiones relacionadas