连接两个一维NumPy数组

2024-04-23 12:16:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在NumPy中有两个简单的一维数组。我应该可以使用numpy.concatenate连接它们。但是下面的代码有一个错误:

TypeError: only length-1 arrays can be converted to Python scalars

代码

import numpy
a = numpy.array([1, 2, 3])
b = numpy.array([5, 6])
numpy.concatenate(a, b)

为什么?


Tags: to代码numpyonly错误数组bearray
3条回答

concatenate的第一个参数本身应该是要连接的数组序列:

numpy.concatenate((a,b)) # Note the extra parentheses.

连接1D数组有多种可能性,例如

numpy.r_[a, a],
numpy.stack([a, a]).reshape(-1),
numpy.hstack([a, a]),
numpy.concatenate([a, a])

所有这些选项对于大型数组都同样快速;对于小型数组,concatenate有一个轻微的边:

enter image description here

绘图是用perfplot创建的:

import numpy
import perfplot

perfplot.save(
    "o.png",
    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)',
    logx=True,
    logy=True,
    )

行应该是:

numpy.concatenate([a,b])

要连接的数组需要作为序列传入,而不是作为单独的参数传入。

NumPy documentation

numpy.concatenate((a1, a2, ...), axis=0)

Join a sequence of arrays together.

它试图将您的b解释为axis参数,这就是为什么它抱怨无法将其转换为标量。

相关问题 更多 >