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

时间:2014-08-22 18:11:26

标签: python arrays numpy concatenation

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

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

然后我得到了

ValueError: 0-d arrays can't be concatenated

如果我这样做

    tmp = np.concatenate(allValues, np.array([50], float))

没有错误消息,但tmp变量也不反映连接。

3 个答案:

答案 0 :(得分:12)

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

tmp = np.concatenate((allValues, np.array([30], float)))
tmp = np.concatenate([allValues, np.array([30], float)])

检查np.concatenate concatenate。请注意,第一个参数是数组的序列(例如list,tuple)。 将它们作为单独的参数。

据我所知,这个API由所有numpy的串联函数共享:documentationconcatenatehstackvstack和{ {3}}所有都采用一个主要参数,应该是一些数组序列。


您获得该特定错误的原因是数组也是序列。但这意味着allValuesallValues解释为要连接的数组序列。但是,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 的第二个(可选)参数,它是要连接的轴。这只能起作用,因为第二个参数中有一个元素,可以转换为整数,因此是一个有效值。如果你在第二个参数中放置了一个包含更多元素的数组,那么你会得到一个不同的错误:

{{1}}

答案 1 :(得分:9)

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

ValueError: 0-d arrays can't be concatenated

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

以下是使用np.asarray转换现有python数组的链接 要么 create np arrays,如果有帮助的话。

答案 2 :(得分:1)

另一种获取此错误的方法是拥有两个不同类型的numpy对象?

尝试np.concatenate([A,B])时出现此错误

ValueError: all the input arrays must have same number of dimensions,当我运行np.concatenate([B,A])

就像@mithunpaul提到的那样,我的类型已关闭:A是44279x204的数组,而B是<44279x12 sparse matrix of type '<class 'numpy.float64'>' with 88558 stored elements in Compressed Sparse Row format>)

所以这就是错误发生的原因。虽然还不知道如何解决。