numpy 数组连接错误:0-d 数组无法连接
Posted
技术标签:
【中文标题】numpy 数组连接错误:0-d 数组无法连接【英文标题】:numpy array concatenation error: 0-d arrays can't be concatenated 【发布时间】:2014-10-16 16:06:30 【问题描述】:我正在尝试连接两个 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 变量也不反映串联。
【问题讨论】:
【参考方案1】:您需要将要连接的数组放入参数中的序列(通常是元组或列表)中。
tmp = np.concatenate((allValues, np.array([30], float)))
tmp = np.concatenate([allValues, np.array([30], float)])
检查documentation 是否有np.concatenate
。请注意,第一个参数是数组的序列(例如列表、元组)。它确实不将它们作为单独的参数。
据我所知,这个 API 由所有 numpy 的连接函数共享:concatenate
、hstack
、vstack
、dstack
和 column_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
【讨论】:
【参考方案2】:还要确保连接两个 numpy 数组。我将一个 python 数组与一个 numpy 数组连接起来,它给了我同样的错误:
ValueError: 0-d arrays can't be concatenated
我花了一些时间才弄清楚这一点,因为 *** 中的所有答案都假设您有两个 numpy 数组。 非常愚蠢但很容易被忽视的错误。因此发布以防万一这对某人有帮助。
这里是使用np.asarray转换现有python数组的链接 要么 create np arrays,如果有帮助的话。
【讨论】:
【参考方案3】:获得此错误的另一种方法是拥有两个不同类型的 numpy 对象?
我在尝试np.concatenate([A,B])
时收到此错误
当我运行np.concatenate([B,A])
时ValueError: all the input arrays must have same number of dimensions
正如@mithunpaul 提到的,我的类型是关闭的:A 是一个 44279x204 的数组,B 是一个 <44279x12 sparse matrix of type '<class 'numpy.float64'>' with 88558 stored elements in Compressed Sparse Row format>)
这就是错误发生的原因。不过还不知道怎么解决。
【讨论】:
np.concatenate() 不适用于稀疏矩阵。对于您的示例,请使用np.concatenate([B.todense(),A])
。如果两者都是稀疏的,那么.todense()
他们都是。以上是关于numpy 数组连接错误:0-d 数组无法连接的主要内容,如果未能解决你的问题,请参考以下文章