2015-01-24 13 views
6

Ich habe eine Liste mit numpy Arrays wie L = [a, b, c] wo a, b und c sind numpy Arrays mit Größen N_a in T, N_b in T und N_c in T.
Ich möchte a, b und c zeilenweise verketten und ein numpy Array mit Form (N_a + N_b + N_c, T) erhalten. Offensichtlich wird für eine Lösung eine for-Schleife ausgeführt und numpy.concatenate verwendet, aber gibt es irgendeine pythonische Methode, dies zu tun?verketten numpy Arrays, die Elemente einer Liste sind

Dank

Antwort

10

Verwendung numpy.vstack.

L = (a,b,c) 
arr = np.vstack(L) 
+1

Vielen Dank. Es scheint, als ob meine Punkte noch nicht genug sind, um Sie noch zu wählen. – TNM

+1

@TNM Sie können dies immer noch als richtige Antwort auswählen. – BenB

2

help('concatenate' hat diese Unterschrift:

concatenate(...) 
    concatenate((a1, a2, ...), axis=0) 

    Join a sequence of arrays together. 

(a1, a2, ...) wie Ihre Liste aussieht, ist es nicht? Und die Standardachse ist diejenige, der Sie beitreten möchten. So lässt es versuchen:

In [149]: L = [np.ones((3,2)), np.zeros((2,2)), np.ones((4,2))] 

In [150]: np.concatenate(L) 
Out[150]: 
array([[ 1., 1.], 
     [ 1., 1.], 
     [ 1., 1.], 
     [ 0., 0.], 
     [ 0., 0.], 
     [ 1., 1.], 
     [ 1., 1.], 
     [ 1., 1.], 
     [ 1., 1.]]) 

vstack auch dies tut, aber Blick auf seinen Code:

def vstack(tup): 
    return np.concatenate([atleast_2d(_m) for _m in tup], 0) 

Alle extra tut, ist sicher, dass die Komponente Arrays 2 Dimensionen haben, die bei Ihnen zu tun.

+1

Ich verstehe. Im Wesentlichen sollte es hier also schneller sein, Verkettungen zu verwenden. Thanks – TNM

+1

'vstack' sollte nicht viel Zeit hinzufügen, da es nur mit Eigenschaften wie Form und Schritte fummelt. Grundsätzlich ist es eine Komfortfunktion. – hpaulj

Verwandte Themen