2010-03-01 14 views
23

Sicuramente ci deve essere un modo per farlo ... Non riesco a risolverlo.numpy: estensione di array lungo un nuovo asse?

Ho un (9,4) array, e voglio ripeterlo lungo un 3o asse 4096 volte ... Quindi diventa semplicemente (9,4,4096), con ogni valore dall'array 9,4 semplicemente ripetuto 4096 volte lungo il nuovo asse.

Se il mio diagramma 3D dubbia senso (la diagonale è un asse z)

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

Acclamazioni

EDIT: Giusto per chiarire, l'enfasi qui è sulla (9,4) dell'array essere RIPETUTO per ciascuna delle 4096 "righe" del nuovo asse. Immaginate una sezione trasversale - ogni matrice originale (9,4) è una di quelle che scendono lungo il cuboide 4096.

+0

'np.tile' è un'altra opzione. Vedi le risposte a [questa domanda] (http://stackoverflow.com/q/1721802/2623899). – dbliss

+0

Inoltre hai disegnato il diagramma per matrice 4 per 9. :) –

risposta

22

Ecco un modo:

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

Se X è dato a voi come solo (9,4), quindi

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

Grazie ancora Steve, stava diventando confuso perché non mi ero reso conto che dovevi rimodellare l'array prima di usare il metodo repeat - continuava a dirmi che stavo cercando di usare un asse che non era definito. Ha senso anche se ora. –

9

È anche possibile avvalersi delle norme di trasmissione di ripetere-fill una ri-sized array:

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

Se non vi piacciono gli assi ordinate in questo modo, si può quindi trasporre:

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

domanda è super vecchio, ma qui è un'altra opzione in ogni caso:

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

Invece di '[X for i in range (4096)]' puoi semplicemente fare '[X] * 4096'. – blubberdiblub

+0

Buona chiamata, ho modificato la mia risposta. – DavidS

Problemi correlati