ValueError: 用序列设置数组元素
为什么下面这些代码示例:
np.array([[1, 2], [2, 3, 4]])
np.array([1.2, "abc"], dtype=float)
都会出现以下错误呢?
ValueError: setting an array element with a sequence.
11 个回答
26
在我的情况下,我在使用Tensorflow时遇到了这个错误,原因是我试图输入一个长度或序列不同的数组:
举个例子:
import tensorflow as tf
input_x = tf.placeholder(tf.int32,[None,None])
word_embedding = tf.get_variable('embeddin',shape=[len(vocab_),110],dtype=tf.float32,initializer=tf.random_uniform_initializer(-0.01,0.01))
embedding_look=tf.nn.embedding_lookup(word_embedding,input_x)
with tf.Session() as tt:
tt.run(tf.global_variables_initializer())
a,b=tt.run([word_embedding,embedding_look],feed_dict={input_x:example_array})
print(b)
如果我的数组是:
example_array = [[1,2,3],[1,2]]
那么我就会得到错误:
ValueError: setting an array element with a sequence.
但是如果我进行填充的话:
example_array = [[1,2,3],[1,2,0]]
现在它就可以正常工作了。
92
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. 试图把一个长度大于1的numpy数组放进一个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就会告诉你,它不知道怎么用一个序列来设置数组元素。
379
可能的原因 1:尝试创建一个不规则数组
你可能是想从一个列表创建一个数组,但这个列表的形状并不像一个多维数组:
numpy.array([[1, 2], [2, 3, 4]]) # wrong!
numpy.array([[1, 2], [2, [3, 4]]]) # wrong!
在这些例子中,传给 numpy.array
的参数包含了不同长度的序列。这会导致错误信息,因为输入的列表并没有形成一个可以变成多维数组的“盒子”。
可能的原因 2:提供了不兼容类型的元素
比如说,你在一个类型为 float
的数组中放了一个字符串:
numpy.array([1.2, "abc"], dtype=float) # wrong!
如果你真的想要一个包含字符串和浮点数的 NumPy 数组,你可以使用 object
这个数据类型,它允许数组存放任意的 Python 对象:
numpy.array([1.2, "abc"], dtype=object)