2016-07-21 16 views
0

Ich habe ein Problem mit re-stapeln numpy ndarrays in einer bestimmten Weise. Ich möchte die inneren 2D-Matrizen neu stapeln, so dass die Spalten nebeneinander liegen. Zum Beispiel, wenn dies ist mein Eingang:Effizientes erneutes Stapeln eines numpy ndarray

>>> k.shape 
(2, 3, 3, 2) 
>>> k 
array([[[[ 7., 6.], 
     [ 7., 5.], 
     [ 5., 5.]], 

     [[ 2., 7.], 
     [ 5., 2.], 
     [ 7., 1.]], 

     [[ 9., 1.], 
     [ 7., 1.], 
     [ 2., 6.]]], 


     [[[ 5., 8.], 
     [ 9., 6.], 
     [ 3., 7.]], 

     [[ 8., 2.], 
     [ 2., 8.], 
     [ 4., 4.]], 

     [[ 8., 9.], 
     [ 5., 9.], 
     [ 2., 4.]]]], dtype=float32) 

weiß ich ich brauche np.hstack zu wissen, ich weiß nur nicht, wie man es auch tun. Hier ist zur Zeit, wie ich es tue, und das ist, was ich will es so aussehen:

>>> np.array([np.hstack(j) for j in k]) 
array([[[ 7., 6., 2., 7., 9., 1.], 
    [ 7., 5., 5., 2., 7., 1.], 
    [ 5., 5., 7., 1., 2., 6.]], 

    [[ 5., 8., 8., 2., 8., 9.], 
    [ 9., 6., 2., 8., 5., 9.], 
    [ 3., 7., 4., 4., 2., 4.]]], dtype=float32) 

Sie können es wie folgt vorstellen: Ich habe 2 Bilder der Dimension 3x2 und jedes Bild hat drei Kanäle. Ich möchte alle Kanäle von JEDEM Bild nebeneinander horizontal stapeln.

Ich entschuldige mich, wenn das Beispiel ein wenig seltsam ist, aber die Daten, mit denen ich arbeite, wird nicht einfacher als das.

Liste Verständnis in Python ist wirklich langsam. Gibt es einen schnelleren Weg, dies zu tun?

Danke!

+2

Gerade mit dieser gewünschten Form neu zu gestalten. – Divakar

+0

Das Umformen stapelt Ihre Spalten nicht horizontal, so dass das nicht in Frage kommt ... –

+0

@Divakar, entschuldigung, mein Beispiel war schrecklich, da es nicht klar machte, was ich machen wollte. Ich hoffe, es macht jetzt mehr Sinn. Ich versuche, Spalten in einer bestimmten Art und Weise zu stapeln. –

Antwort

1

Wir permutieren Achsen mit np.transpose und dann neu zu gestalten -

arr.transpose(0,2,1,3).reshape(2,3,-1) 
+1

Danke. Ich habe gespürt, dass du nie den Kredit bekommen hast, den du dafür verdient hast. –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ Ah, ich habe gerade bemerkt, dass deine Post den gleichen Inhalt hat. Zu spät jetzt, denke ich. – Divakar

Verwandte Themen