为什么要做下面的代码示例:
np.array([[1, 2], [2, 3, 4]])
np.array([1.2, "abc"], dtype=float)
...都给出以下错误?
ValueError:使用序列设置数组元素。
为什么要做下面的代码示例:
np.array([[1, 2], [2, 3, 4]])
np.array([1.2, "abc"], dtype=float)
...都给出以下错误?
ValueError:使用序列设置数组元素。
当前回答
对于那些在Numpy中遇到类似问题的人来说,一个非常简单的解决方案是:
定义数组时定义dtype=object为数组赋值。例如:
out = np.empty_like(lil_img, dtype=object)
其他回答
这个错误是因为np的dtype参数。数组函数指定数组中元素的数据类型,并且只能设置为与所有元素兼容的单一数据类型。值"abc"不是有效的浮点数,因此试图将其转换为浮点数会导致ValueError。为了避免此错误,可以从列表中删除string元素,或者选择可以同时处理浮点值和字符串值的不同数据类型,例如object。
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)
Python ValueError:
ValueError: setting an array element with a sequence.
意思就是它所说的,你试图把一系列数字塞进一个数字槽。它可以在各种情况下抛出。
1. 当你传递一个python元组或列表来解释为numpy数组元素时:
import numpy
numpy.array([1,2,3]) #good
numpy.array([1, (2,3)]) #Fail, can't convert a tuple into a numpy
#array element
numpy.mean([5,(6+7)]) #good
numpy.mean([5,tuple(range(2))]) #Fail, can't convert a tuple into a numpy
#array element
def foo():
return 3
numpy.array([2, foo()]) #good
def foo():
return [3,4]
numpy.array([2, foo()]) #Fail, can't convert a list into a numpy
#array element
2. 通过尝试将numpy数组长度> 1塞进numpy数组元素:
x = np.array([1,2,3])
x[0] = np.array([4]) #good
x = np.array([1,2,3])
x[0] = np.array([4,5]) #Fail, can't convert the numpy array to fit
#into a numpy array element
正在创建numpy数组,numpy不知道如何将多值元组或数组塞到单个元素槽中。它期望你给它的任何东西都计算为一个数字,如果不这样做,Numpy会回应说它不知道如何用序列设置数组元素。
对我来说,问题是另一个。我试图将int类型的列表转换为数组。问题是有一个列表与其他列表的长度不同。如果你想证明它,你必须做到:
print([i for i,x in enumerate(list) if len(x) != 560])
在我的例子中,长度参考是560。
在我的例子中,问题在于数据框架X[]的散点图:
ax.scatter(X[:,0],X[:,1],c=colors,
cmap=CMAP, edgecolor='k', s=40) #c=y[:,0],
#ValueError: setting an array element with a sequence.
#Fix with .toarray():
colors = 'br'
y = label_binarize(y, classes=['Irrelevant','Relevant'])
ax.scatter(X[:,0].toarray(),X[:,1].toarray(),c=colors,
cmap=CMAP, edgecolor='k', s=40)