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

14

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

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个回答

16
问题在于ab都是一维数组,因此只有一个轴可以将它们连接起来。
相反,您可以使用vstackv表示垂直):
>>> 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 在第一个轴上(axis=0)连接这些数组。


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

6
也许这并不是一个好的解决方案,但它是使您的代码工作的简单方法,只需添加reshape即可。
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))

3
要使用concatenate,您需要将ab变成二维数组而不是一维数组,如下所示:
c = concatenate((atleast_2d(a), atleast_2d(b)))

或者,您可以简单地执行以下操作:

c = array((a,b))

谢谢你的回答。我们如何使用array进行水平拼接?它只适用于垂直拼接吗? - Eghbal
@user2991243 你可以使用 axis 参数来控制要连接的轴,它默认为 0 - Ying Xiong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接