numpy数组连接错误:0-d数组不能连接

Bin*_*hou 13 python arrays numpy concatenation

我试图连接两个numpy数组,但我得到了这个错误.有人能给我一些关于这实际意味着什么的线索吗?

    Import numpy as np
    allValues = np.arange(-1, 1, 0.5)
    tmp = np.concatenate(allValues, np.array([30], float))
Run Code Online (Sandbox Code Playgroud)

然后我得到了

ValueError: 0-d arrays can't be concatenated
Run Code Online (Sandbox Code Playgroud)

如果我做

    tmp = np.concatenate(allValues, np.array([50], float))
Run Code Online (Sandbox Code Playgroud)

没有错误消息,但tmp变量也不反映串联.

Rog*_*Fan 13

您需要将要连接的数组放入参数中的序列(通常是元组或列表)中.

tmp = np.concatenate((allValues, np.array([30], float)))
tmp = np.concatenate([allValues, np.array([30], float)])
Run Code Online (Sandbox Code Playgroud)

检查文档np.concatenate.请注意,第一个参数是数组的序列(例如list,tuple).它并没有把他们作为独立参数.

据我所知,这个API是由所有的numpy的的级联功能共享:concatenate,hstack,vstack,dstack,并且column_stack都以这应该是阵列的一些序列的单一主要论点.


你得到那个特殊错误的原因是数组也是序列.但这意味着它将concatenate解释allValues为连接的数组序列.但是,每个元素allValues都是float而不是数组,因此被解释为零维数组.正如错误所说,这些"数组"无法连接.

第二个参数被视为第二个(可选)参数concatenate,它是连接的轴.这只能起作用,因为第二个参数中有一个元素,可以转换为整数,因此是一个有效值.如果你在第二个参数中放置了一个包含更多元素的数组,那么你会得到一个不同的错误:

a = np.array([1, 2])
b = np.array([3, 4])
np.concatenate(a, b)

# TypeError: only length-1 arrays can be converted to Python scalars
Run Code Online (Sandbox Code Playgroud)


mit*_*aul 9

还要确保连接两个numpy数组.我用一个numpy数组连接一个python数组,它给了我同样的错误:

ValueError: 0-d arrays can't be concatenated
Run Code Online (Sandbox Code Playgroud)

我花了一些时间才弄清楚这一点,因为stackoverflow中的所有答案都假设你有两个numpy数组.相当愚蠢但容易被忽视的错误.因此发布以防万一这有助于某人.

以下是使用np.asarray转换现有python数组 或 创建np数组的链接,如果有帮助的话.