2010-03-01 12 views
23

Na pewno musi być sposób, aby to zrobić ... Nie mogę tego rozwiązać.numpy: rozszerzenie tablic wzdłuż nowej osi?

Mam macierz (9,4) i chcę ją powtórzyć wzdłuż trzeciej osi 4096 razy ... Tak więc staje się ona prosta (94,4096), z każdą wartością z tablicy 9,4 po prostu powtórzono 4096 razy w dół nowej osi.

Jeśli mój wątpliwy schemat 3D ma sens (przekątna jest oś)

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

Cheers

EDIT: Właśnie w celu wyjaśnienia, jest tu nacisk na (9,4) macierzy jest REPEATED dla każdego z 4096 "rzędów" nowej osi. Wyobraźmy sobie przekrój - każda oryginalna (9,4) tablica jest jedną z tych w dół o sześcianu długości 4096.

+0

'np.tile' ma innej opcji. Zobacz odpowiedzi na [to pytanie] (http://stackoverflow.com/q/1721802/2623899). – dbliss

+0

Również masz narysowany schemat dla macierzy 4 na 9. :) –

Odpowiedz

22

Oto jeden sposób:

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

Jeśli X jest podawana jako jedyny (9,4), a następnie

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

Jeszcze raz dziękuję, Steve, był zdezorientowany, ponieważ nie zdawałem sobie sprawy, że musisz zmienić kształt tablicy przed użyciem metody powtarzania - powtarzało mi, że próbowałem użyć osi, która nie została zdefiniowana. Teraz jednak ma sens. –

9

Można także opierać się na zasadach nadawania powtórzyć-fill tablica zmiany rozmiaru:

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

Jeśli nie podoba ci się osie zamówione w ten sposób, możesz przetransponować:

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

Pytanie jest bardzo stary, ale tutaj jest inna opcja i tak:

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

Zamiast '[X for i in range (4096)] możesz po prostu zrobić' [X] * 4096'. – blubberdiblub

+0

Dobra rozmowa, zredagowałem moją odpowiedź. – DavidS

Powiązane problemy