numpy数组连接错误:0维数组无法连接
我正在尝试把两个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 个回答
出现这个错误的另一个原因是有两个不同类型的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 的稀疏矩阵,类型为 '<class 'numpy.float64'>',在压缩稀疏行格式中存储了 88558 个元素>
。
所以这就是错误发生的原因。不过我还不知道怎么解决这个问题。
还要确保你是在连接两个numpy数组。我之前是把一个Python数组和一个numpy数组连接在一起,这样也出现了同样的错误:
ValueError: 0-d arrays can't be concatenated
我花了一些时间才搞明白这一点,因为StackOverflow上的所有答案都假设你有两个numpy数组。这个错误看起来很傻,但很容易被忽视。所以我发这个帖子,希望能帮到别人。
这里有一些链接,可以帮助你把现有的Python数组转换成numpy数组,使用np.asarray,或者创建numpy数组,希望对你有帮助。
你需要把想要合并的数组放进一个序列里(通常是元组或列表),然后作为参数传入。
tmp = np.concatenate((allValues, np.array([30], float)))
tmp = np.concatenate([allValues, np.array([30], float)])
查看一下 文档,了解 np.concatenate
的用法。注意,第一个参数是一个数组的序列(比如列表或元组)。它并不是把这些数组当作单独的参数来处理。
据我所知,这个接口在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