In generale puoi concatenare un'intera sequenza di array lungo qualsiasi asse:
numpy.concatenate( LIST, axis=0 )
ma non ci si deve preoccupare circa la forma e la dimensionalità di ogni matrice della lista (per un'uscita 3x5 2-dimensionale, è necessario garantire che essi siano tutti 2-dimensionali array N-per-5 già). Se si desidera concatenare array unidimensionali come righe di un output bidimensionale, è necessario espandere la loro dimensionalità.
Come sottolinea la risposta di Jorge, c'è anche la funzione stack
, introdotta in numpy 1.10:
numpy.stack( LIST, axis=0 )
Questo adotta l'approccio complementare: crea una nuova vista di ogni array di input e aggiunge una dimensione extra (in questo caso, a sinistra, quindi ogni n
array 1D -element diventa un array 1-by- n
2D) prima della concatenazione. Funzionerà solo se tutti gli array di input hanno la stessa forma, anche lungo l'asse di concatenazione.
vstack
(o equivalentemente row_stack
) è spesso una soluzione più facile da usare perché richiederà una sequenza di array a 1 e / o 2 dimensioni ed espanderà la dimensionalità automaticamente dove necessario e solo dove necessario, prima di concatenare l'intero elenco insieme. Dove è richiesta una nuova dimensione, viene aggiunta a sinistra. Ancora una volta, puoi concatenare un intero elenco in una volta senza bisogno di iterare:
numpy.vstack( LIST )
Questo comportamento flessibile è anche esibito dalla scorciatoia sintattica numpy.r_[ array1, ...., arrayN ]
(notare le parentesi quadre). Questo è utile per concatenare alcuni array con nomi espliciti, ma non va bene per la tua situazione perché questa sintassi non accetterà una sequenza di array, come il tuo LIST
.
Esiste anche una funzione column_stack
e una scorciatoia analoghe c_[...]
, per lo stacking orizzontale (a colonna), nonché una funzione quasi analoga, hstack
sebbene per qualche motivo quest'ultima sia meno flessibile (è più rigorosa sulla dimensionalità degli array di input e cerca di concatenare Array 1-D end-to-end invece di trattarli come colonne).
Infine, nel caso specifico di stacking verticale di array 1-D, funziona anche quanto segue:
numpy.array( LIST )
... perché gli array possono essere costruiti da una sequenza di altri array, aggiungendo una nuova dimensione all'inizio.
LIST = [[array([1, 2, 3, 4, 5]), array([1, 2, 3, 4, 5],[1,2,3,4,5])]
questa non è la sintassi Python corretta. Si prega di precisare.