numpy数组连接错误:无法连接0维数组。

17
我试图连接两个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个回答

16
你需要将想要连接的数组放入一个序列中(通常是元组或列表)作为参数。
tmp = np.concatenate((allValues, np.array([30], float)))
tmp = np.concatenate([allValues, np.array([30], float)])

查阅 np.concatenate 的文档。请注意,第一个参数是一个数组序列(例如列表,元组),而不是单独的数组。

据我所知,所有numpy的串联函数都使用此API: concatenate, hstack, vstack, dstackcolumn_stack 都需要一个作为串联目标的数组序列作为其第一个参数。


你得到这个特定错误的原因是数组也是序列。这意味着concatenate正在将allValues解释为一个待串联的数组序列。然而,allValues的每个元素都是浮点数而不是数组,因此被解释为零维数组。如错误所述,这些“数组”无法串联。

第二个参数被视为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

13

还要确保您正在连接两个numpy数组。我曾经将一个python数组与一个numpy数组连接起来,结果出现了相同的错误:

ValueError: 0-d arrays can't be concatenated

这需要花费一些时间来理解,因为stackoverflow上的所有答案都假设你有两个numpy数组。这是一个相当愚蠢但容易忽略的错误。因此,我在此发布,以防这对某人有所帮助。
以下是使用np.asarray转换现有python数组的链接或创建np数组的链接,如果有帮助的话,请参考:np.asarray创建np数组

3

出现这种错误的另一种方式是有两个不同类型的numpy对象...

当我尝试使用np.concatenate([A,B])时,我会得到这个错误。

而当我运行np.concatenate([B,A])时,会出现ValueError:所有输入数组必须具有相同的维数

正如@mithunpaul所提到的,我的类型有误:A是一个44279x204的数组,而B是一个<44279x12稀疏矩阵,类型为'<class 'numpy.float64'>',在压缩稀疏行格式中存储了88558个元素>

因此,这就是错误发生的原因。不过还不知道如何解决它。

最初的回答。


2
np.concatenate() 无法处理稀疏矩阵。对于您的示例,请使用 np.concatenate([B.todense(),A])。如果两者都是稀疏矩阵,则将它们都转换为 .todense() - grofte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接