2015-04-15 13 views
6

Voglio concatenare due array verticale in Python utilizzando il pacchetto NumPy:Come concatenare verticalmente due array in Python?

a = array([1,2,3,4]) 
b = array([5,6,7,8]) 

voglio qualcosa di simile:

c = array([[1,2,3,4],[5,6,7,8]]) 

Come possiamo farlo utilizzando la funzione concatenate? Ho controllato queste due funzioni, ma i risultati sono gli stessi:

c = concatenate((a,b),axis=0) 
# or 
c = concatenate((a,b),axis=1) 

Abbiamo questo in entrambe queste funzioni:

c = array([1,2,3,4,5,6,7,8]) 

risposta

8

Il problema è che entrambi gli a e b sono array 1D e quindi c'è un solo asse su cui collegarli.

Invece, è possibile utilizzare vstack (v per verticale):

>>> np.vstack((a,b)) 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

Inoltre, row_stack è un alias della funzione vstack:

>>> np.row_stack((a,b)) 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

E 'anche interessante notare che più array della stessa lunghezza possono essere impilati contemporaneamente. Ad esempio, np.vstack((a,b,x,y)) avrebbe quattro righe.

Sotto il cofano, vstack opere assicurandosi che ogni matrice ha almeno due dimensioni (utilizzando atleast_2D) e quindi chiamando concatenate aderire queste matrici sul primo asse (axis=0).

2

Per utilizzare concatenate, è necessario effettuare a e b matrici 2D, invece di 1D, come in

c = concatenate((atleast_2d(a), atleast_2d(b))) 

in alternativa, si può semplicemente fare

c = array((a,b)) 
+0

Grazie per la risposta. Come possiamo concatenare orizzontalmente usando 'array'? È solo per la concatenazione verticale? – user2991243

+0

@ user2991243 È possibile utilizzare il parametro 'axis' per controllare quale asse concatenare e il valore predefinito è' 0'. –

2

Uso np.vstack:

In [4]: 

import numpy as np 
a = np.array([1,2,3,4]) 
b = np.array([5,6,7,8]) 
c = np.vstack((a,b)) 
c 
Out[4]: 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

In [5]: 

d = np.array ([[1,2,3,4],[5,6,7,8]]) 
d 
​ 
Out[5]: 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 
In [6]: 

np.equal(c,d) 
Out[6]: 
array([[ True, True, True, True], 
     [ True, True, True, True]], dtype=bool) 
3

Forse non è una buona soluzione, ma è modo semplice per rende il codice funziona, basta aggiungere Reshape:

a = array([1,2,3,4]) 
b = array([5,6,7,8]) 

c = concatenate((a,b),axis=0).reshape((2,4)) 

print c 

out:

[[1 2 3 4] 
[5 6 7 8]] 

In generale se si dispone di più di 2 array con la stessa lunghezza:

reshape((number_of_arrays, length_of_array))