2016-12-03 2 views

Antwort

4

Haben Sie np.array versucht?

np.array([[1,2],[3,4]]) 

macht eine 2D-Anordnung von 2 1D-Arrays (Listen) Verketten

ähnlich

np.array([np.ones(3,3), np.zeros(3,3)]] 

sollte einen (2,3,3) -Matrix erzeugen.

Eine neuere np.stack Funktion gibt Ihnen mehr Kontrolle darüber, welche Achse hinzugefügt wird. Es funktioniert, indem die Dimensionen aller Eingabearrays um eins erweitert und verkettet werden.

Sie können die Abmessungen selbst erweitern, z.

In [378]: A=np.ones((2,3),int) 
In [379]: B=np.zeros((2,3),int) 
In [380]: np.concatenate([A[None,:,:], B[None,:,:]], axis=0) 
Out[380]: 
array([[[1, 1, 1], 
     [1, 1, 1]], 

     [[0, 0, 0], 
     [0, 0, 0]]]) 
In [381]: _.shape 
Out[381]: (2, 2, 3) 

Die wichtigsten Dinge zu verstehen sind:

  • passende Dimensionen der Eingänge - sie alle, aber die Dimension entsprechen haben, die

  • erweitert die Dimensionen der Eingänge angeschlossen werden wie benötigt. Um 2D-Arrays zu einem 3D zu verketten, müssen die 2Ds zuerst auf 3D erweitert werden. Das None oder np.newaxis Trick ist besonders wertvoll.

  • verketten entlang der rechten Achse.

stack, hstack, vstack etc alle erleichtern dies, sondern eine Fähigkeit numpy Benutzer sollte direkt arbeiten können mit concatenate. Üben Sie mit kleinen Stichproben in einer interaktiven Sitzung.

In [385]: np.array((A,B)).shape 
Out[385]: (2, 2, 3) 
In [386]: np.stack((A,B)).shape 
Out[386]: (2, 2, 3) 
In [387]: np.stack((A,B),axis=1).shape 
Out[387]: (2, 2, 3) 
In [388]: np.stack((A,B),axis=2).shape 
Out[388]: (2, 3, 2) 

Wenn die Arrays in Form unterscheiden, wird np.array DTYPE Array ein Objekt erstellen

In [389]: C=np.ones((3,3)) 
In [390]: np.array((A,C)) 
Out[390]: 
array([array([[1, 1, 1], 
     [1, 1, 1]]), 
     array([[ 1., 1., 1.], 
     [ 1., 1., 1.], 
     [ 1., 1., 1.]])], dtype=object) 
In [391]: _.shape 
Out[391]: (2,) 

dstack (und stack) werden Probleme mit unterschiedlicher Größe Arrays:

In [392]: np.dstack((A,B,C)) 
.... 
ValueError: all the input array dimensions except for the concatenation axis must match exactly 
+0

Ich habe versucht 'np.array()' aber das bringt mir ein numpy Array mit Form '(n,)' zurück, während jedes Element darin ein anderes numpy Array ist. – xxx222

+0

Dann müssen sich Ihre 'n' Arrays in der Form unterscheiden. Es erstellt ein Objekt-Array. Wie ist die Form Ihrer Arrays? Ich sehe nicht, wie 'dstack' funktionieren würde. – hpaulj

+0

Ich habe es damals nicht bemerkt! Ich fand schließlich einige meiner numply Arrays sind nicht mit der gleichen Größe. Danke für deine Antwort! – xxx222