连接两个一维NumPy数组

413 投票
7 回答
553701 浏览
提问于 2025-04-17 12:49

我想知道怎么把两个一维数组在 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 理解为轴参数,这就是为什么它抱怨无法把它转换成标量的原因。

撰写回答