2009-11-13 12 views
10

Während der Vorbereitung von Daten für NumPy berechnen. Ich bin über Art und Weise neugierig zu konstruieren:Construct 3D-Array in numpy von bestehenden 2D-Array

myarray.shape => (2,18,18) 

aus:

d1.shape => (18,18) 
d2.shape => (18,18) 

Ich versuche NumPy Befehl zu verwenden:

hstack([[d1],[d2]]) 

aber es funktioniert nicht sieht!

Antwort

6

hstack und vstack tun keine Änderung der Anzahl der Dimensionen der Arrays: sie ihnen nur „nebeneinander“ setzen. Wenn Sie also zweidimensionale Arrays kombinieren, entsteht ein neues zweidimensionales Array (kein 3D-Array!).

Sie können tun, was Daniel vorgeschlagen (direkt numpy.array([d1, d2]) verwenden).

Alternativ können Sie Ihre Arrays 3D-Arrays konvertieren, bevor sie stapeln, indem sie eine neue Dimension zu jedem Array hinzu:

d3 = numpy.vstack([ d1[newaxis,...], d2[newaxis,...] ]) # shape = (2, 18, 18) 

In der Tat, d1[newaxis,...].shape == (1, 18, 18), und Sie können sowohl 3D-Arrays Stack direkt und erhalten die neue 3D-Array (d3), die Sie wollten.

+0

:) danke EOL, jetzt werde ich mehr über vstack wissen, hstack – vernomcrp

+1

'np.vstack ([eine [np.newaxis, ...], b [np.newaxis, ...]])' arbeitete wie Charme ! Vielen Dank. – thepunitsingh

21

gerade tun d3 = array([d1,d2]) für mich zu arbeiten scheint:

>>> from numpy import array 
>>> # ... create d1 and d2 ... 
>>> d1.shape 
(18,18) 
>>> d2.shape 
(18,18) 
>>> d3 = array([d1, d2]) 
>>> d3.shape 
(2, 18, 18) 
+0

oh seine Arbeit, danke Daniel :) – vernomcrp

+1

Ich habe eine Frage ähnlich. Wenn ich bereits das d3 mit der Form (2,18,18) habe und ich möchte ein weiteres 2-d-Array d4 (18x18) in d3 hinzufügen, um 3-d-Array (3,18,18) zu machen. Was soll ich machen? –

+1

Sie einfach "vstack (d3, d4 [np.newaxis, ...])", wie in meiner Antwort. – EOL

Verwandte Themen