为什么要做下面的代码示例:

np.array([[1, 2], [2, 3, 4]])
np.array([1.2, "abc"], dtype=float)

...都给出以下错误?

ValueError:使用序列设置数组元素。


当前回答

可能原因1:试图创建一个锯齿状数组

你可以从一个形状不像多维数组的列表中创建一个数组:

numpy.array([[1, 2], [2, 3, 4]])         # wrong!
numpy.array([[1, 2], [2, [3, 4]]])       # wrong!

在这些例子中,numpy的参数。数组包含不同长度的序列。这将产生此错误消息,因为输入列表的形状不像可以转换为多维数组的“方框”。

可能原因2:提供类型不兼容的元素

例如,在float类型的数组中提供一个字符串作为元素:

numpy.array([1.2, "abc"], dtype=float)   # wrong!

如果你真的想要一个既包含字符串又包含浮点数的NumPy数组,你可以使用dtype对象,它允许数组保存任意Python对象:

numpy.array([1.2, "abc"], dtype=object)

其他回答

可能原因1:试图创建一个锯齿状数组

你可以从一个形状不像多维数组的列表中创建一个数组:

numpy.array([[1, 2], [2, 3, 4]])         # wrong!
numpy.array([[1, 2], [2, [3, 4]]])       # wrong!

在这些例子中,numpy的参数。数组包含不同长度的序列。这将产生此错误消息,因为输入列表的形状不像可以转换为多维数组的“方框”。

可能原因2:提供类型不兼容的元素

例如,在float类型的数组中提供一个字符串作为元素:

numpy.array([1.2, "abc"], dtype=float)   # wrong!

如果你真的想要一个既包含字符串又包含浮点数的NumPy数组,你可以使用dtype对象,它允许数组保存任意Python对象:

numpy.array([1.2, "abc"], dtype=object)

当形状不是规则的或者元素有不同的数据类型时,dtype参数传递给np。数组只能是object。

import numpy as np

# arr1 = np.array([[10, 20.], [30], [40]], dtype=np.float32)  # error
arr2 = np.array([[10, 20.], [30], [40]])  # OK, and the dtype is object
arr3 = np.array([[10, 20.], 'hello'])     # OK, and the dtype is also object

``

对我来说,问题是另一个。我试图将int类型的列表转换为数组。问题是有一个列表与其他列表的长度不同。如果你想证明它,你必须做到:

print([i for i,x in enumerate(list) if len(x) != 560])

在我的例子中,长度参考是560。

对于那些在Numpy中遇到类似问题的人来说,一个非常简单的解决方案是:

定义数组时定义dtype=object为数组赋值。例如:

out = np.empty_like(lil_img, dtype=object)

在我的例子中,我有一个嵌套的列表作为我想要用作输入的系列。

第一次检查:如果

df['nestedList'][0]

输出一个列表如[1,2,3],你有一个嵌套的列表。

然后检查当您更改输入df['nestedList'][0]时是否仍然得到错误。

然后,下一步可能是将所有嵌套列表连接到一个非嵌套列表,使用

[item for sublist in df['nestedList'] for item in sublist]

这种对嵌套列表的扁平化是从如何从列表的列表中制作一个扁平化列表中借来的。