我想使用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])
答案 0 :(得分:10)
问题是a
和b
都是一维数组,所以只有一个轴可以加入它们。
相反,您可以使用vstack
( v vertical ):
>>> np.vstack((a,b))
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
此外,row_stack
是vstack
函数的别名:
>>> 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
,您需要制作a
和b
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)