ValueError: 用序列设置数组元素

327 投票
11 回答
1812064 浏览
提问于 2025-04-16 09:52

为什么下面这些代码示例:

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)

撰写回答