toom - 2 years ago 707
Python Question

# numpy concatenate two arrays vertically

I tried the following:

``````>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> np.concatenate((a,b), axis=0)
array([1, 2, 3, 4, 5, 6])
>>> np.concatenate((a,b), axis=1)
array([1, 2, 3, 4, 5, 6])
``````

However, I'd expect at least that one result looks like this

``````array([[1, 2, 3],
[4, 5, 6]])
``````

Why is it not concatenated vertically?

Because both `a` and `b` have only one axis, as their shape is `(3)`, and the axis parameter specifically refers to the axis of the elements to concatenate.

this example should clarify what `concatenate` is doing with axis. Take two vectors with two axis, with shape `(2,3)`:

``````a = np.array([[1,5,9],[2,6,10]])
b = np.array([[3,7,11],[4,8,12]])
``````

concatenates along the 1st axis (rows of the 1st, then rows of the 2nd):

``````print concatenate((a,b),axis=0)
array([[ 1,  5,  9],
[ 2,  6, 10],
[ 3,  7, 11],
[ 4,  8, 12]])
``````

concatenates along the 2nd axis (columns of the 1st, then columns of the 2nd):

``````print concatenate((a,b),axis=1)
array([[ 1,  5,  9,  3,  7, 11],
[ 2,  6, 10,  4,  8, 12]])
``````

to obtain the output you presented, you can use

``````a = np.array([1,2,3])
b = np.array([4,5,6])
vstack((a,b))
``````

You can still do it with concatenate, but it takes longer:

``````a=a.reshape(1,3)
b=b.reshape(1,3)
print concatenate((a,b))
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download