如何在Python中垂直连接两个数组?

时间:2015-04-15 15:39:16

标签: python arrays numpy

我想使用NumPy包在Python中垂直连接两个数组:

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

我想要这样的事情:

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

我们如何使用concatenate函数执行此操作?我检查了这两个函数但结果是一样的:

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

我们在这两个功能中都有这个:

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

4 个答案:

答案 0 :(得分:10)

问题是ab都是一维数组,所以只有一个轴可以加入它们。

相反,您可以使用vstack v vertical ):

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

此外,row_stackvstack函数的别名:

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

值得注意的是,可以同时堆叠多个相同长度的阵列。例如,np.vstack((a,b,x,y))将有四行。

在幕后,vstack确保每个数组至少有两个维度(使用atleast_2D)然后调用concatenate以在第一个轴上连接这些数组({1}}。 {1}})。

答案 1 :(得分:4)

也许它不是一个好的解决方案,但它是使代码有效的简单方法,只需添加重塑:

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

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

print c

出:

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

通常,如果您有两个以上具有相同长度的数组:

reshape((number_of_arrays, length_of_array))

答案 2 :(得分:3)

要使用concatenate,您需要制作ab 2D数组而不是1D,如

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

或者,你可以简单地做

c = array((a,b))

答案 3 :(得分:3)

使用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)