连接两个一维NumPy数组
我想知道怎么把两个一维数组在 NumPy 中连接起来。我试过用 numpy.concatenate
:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5])
np.concatenate(a, b)
但是我遇到了一个错误:
类型错误:只有长度为1的数组可以转换为Python标量
7 个回答
39
在使用 concatenate
这个函数时,第一个参数应该是一个包含多个数组的“序列”,也就是说,你要把这些数组放在一起合并。
numpy.concatenate((a,b)) # Note the extra parentheses.
84
有几种方法可以把一维数组连接在一起,比如:
import numpy as np
np.r_[a, a]
np.stack([a, a]).reshape(-1)
np.hstack([a, a])
np.concatenate([a, a])
对于大数组来说,这些方法的速度差不多;而对于小数组,concatenate
会稍微快一点:
这个图是用 perfplot 制作的:
import numpy
import perfplot
perfplot.show(
setup=lambda n: numpy.random.rand(n),
kernels=[
lambda a: numpy.r_[a, a],
lambda a: numpy.stack([a, a]).reshape(-1),
lambda a: numpy.hstack([a, a]),
lambda a: numpy.concatenate([a, a]),
],
labels=["r_", "stack+reshape", "hstack", "concatenate"],
n_range=[2 ** k for k in range(19)],
xlabel="len(a)",
)
548
使用:
np.concatenate([a, b])
你想要合并的数组需要作为一个序列传入,而不是分开作为多个参数。
来自 NumPy 文档:
numpy.concatenate((a1, a2, ...), axis=0)
将一系列数组连接在一起。
它试图把你的 b
理解为轴参数,这就是为什么它抱怨无法把它转换成标量的原因。