2016-11-23 9 views
1

Welches ist die performante Art und Weise ist etwas wie die2D-Python-Liste von numpy Arrays 2D numpy Array

problem = [ [np.array([1,2,3]), np.array([4,5])], 
      [np.array([6,7,8]), np.array([9,10])]] 

in

desired = np.array([[1,2,3,4,5], 
        [6,7,8,9,10]]) 

Leider ist die endgültige Anzahl der Spalten und Zeilen zu konvertieren (und Länge der Teilmatrizen) ist nicht im Voraus bekannt, da die Teilmatrizen satzweise aus einer Binärdatei gelesen werden.

+0

Also die Anzahl der Elems in jedem Element der Liste wäre die gleiche, als wäre es "5" hier? – Divakar

+0

Funktioniert 'bmat'? – hpaulj

+0

Die Nummer für jede Zeile ist die gleiche, so dass kein Padding oder sonst erforderlich ist. – macmallow

Antwort

1

Ich denke, das:

print np.array([np.hstack(i) for i in problem]) 

Ihrem Beispiel verwenden, läuft dies in 0.00022s, wherease concatenate 0.00038s

nimmt können Sie auch apply_along_axis verwenden obwohl dies in 0,00024s läuft:

print np.apply_along_axis(np.hstack, 1, problem) 
+0

Verwenden von Millisekunden wäre klarer Ich denke, –

+0

sieht gut aus, aber ich glaube, dass es 2 Zuordnungsverfahren dauert? Zuerst für jede Zeile und dann wird jede Zeile in das große Array kopiert? – macmallow

+1

Sehen Sie sich 'bmat'-Code an - ein' hstack' für jede Zeile und 'vstack', um die Zeilen zu verbinden. Wenn die Liste geglättet wurde, können Sie eine "Verkettung" verwenden und sie dann umformen. Ich denke nicht, dass die Zeitunterschiede signifikant sind. – hpaulj

5

Wie wäre es damit:

problem = [[np.array([1,2,3]), np.array([4,5])], 
     [np.array([6,7,8]), np.array([9,10])]] 

print np.array([np.concatenate(x) for x in problem])