2017-11-22 7 views
1

Ich habe 4 Arrays und ich möchte sie zu einem einzigen Array mit Interleaving verketten. Wie mache ich das?Numpy verketten Arrays mit Interleaving

>>> import numpy as np 
>>> a = np.tile(0,(5,2)) 
>>> b = np.tile(1,(5,2)) 
>>> c = np.tile(2,(5,2)) 
>>> d = np.tile(3,(5,2)) 
>>> e = np.concatenate((a,b,c,d),axis=1) 
>>> e 
    array([[0, 0, 1, 1, 2, 2, 3, 3], 
      [0, 0, 1, 1, 2, 2, 3, 3], 
      [0, 0, 1, 1, 2, 2, 3, 3], 
      [0, 0, 1, 1, 2, 2, 3, 3], 
      [0, 0, 1, 1, 2, 2, 3, 3]]) 

Dies gibt nur die Verkettung.

jedoch meine desired_output ist:

>>> desired_output 
    array([[0, 1, 2, 3, 0, 1, 2, 3], 
      [0, 1, 2, 3, 0, 1, 2, 3], 
      [0, 1, 2, 3, 0, 1, 2, 3], 
      [0, 1, 2, 3, 0, 1, 2, 3], 
      [0, 1, 2, 3, 0, 1, 2, 3]]) 

Ich meine, ich weiß, dass ich die verschachtelten Spalten von e wählen können:

>>> f = e[:, ::2] 
>>> array([[0, 1, 2, 3], 
      [0, 1, 2, 3], 
      [0, 1, 2, 3], 
      [0, 1, 2, 3], 
      [0, 1, 2, 3]]) 

Aber wie mache ich ein großes Array?

Antwort

2

Verwenden np.dstack oder np.stack entlang der letzten Achse stapeln, die uns eine 3D Array gibt und dann zu 2D umformen zurück -

np.dstack([a,b,c,d]).reshape(a.shape[0],-1) 
np.stack([a,b,c,d],axis=2).reshape(a.shape[0],-1) 
+0

Süß !! Danke, Mann! Das war sehr schnell. Machst du das für einen Lebensunterhalt oder was? =) – bFig8

+0

@ bFig8 Meistens;) – Divakar

+0

Mann Ich muss wirklich herausfinden, diese "Umgestalten" -Funktion und die Achse Indizierung .. – bFig8