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

uinbv5nw  于 2022-11-10  发布在  其他
关注(0)|答案(8)|浏览(242)

为什么要执行以下代码示例:

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

...是否全部给出以下错误?
ValueError:使用序列设置数组元素。

mzaanser

mzaanser1#

可能原因一:尝试创建交错数组

您可能正在使用形状不像多维数组的列表创建数组:

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

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

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

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

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

如果您确实希望拥有同时包含字符串和浮点数的NumPy数组,则可以使用dtype object,它允许数组包含任意的Python对象:

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

vmjh9lq92#

The PythonValueError:

ValueError: setting an array element with a sequence.

意思正如它所说的,你试图将一个数字序列塞进一个数字槽中。它可以在各种情况下抛出。

1.当您传递要解释为NumPy数组元素的python数组或列表时:

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的Numy数组长度塞入Numy数组元素:

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

一个Numy数组正在被创建,而NumPy不知道如何将多值元组或数组塞进单元素槽中。它希望您给它的值都是单个数字,如果不是这样,Numpy会回应说它不知道如何用序列设置数组元素。

ibrsph3r

ibrsph3r3#

在我的例子中,我在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]]

现在它起作用了。

vltsax25

vltsax254#

对于那些在Numpy遇到类似问题的人来说,一个非常简单的解决方案是:
在定义为其赋值的数组时定义dtype=object。例如:

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

dsekswqp5#

对我来说,这个问题是另一个问题。我正在尝试将int列表的列表转换为数组。问题是,有一份清单的长度与其他清单不同。如果你想证明这一点,你必须做:

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

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

dba5bblo

dba5bblo6#

在我的例子中,问题出在 Dataframe 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)
yrwegjxp

yrwegjxp7#

当形状不规则或元素具有不同的数据类型时,传递给np数组的dtype参数只能是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

``

tpgth1q7

tpgth1q78#

在我的例子中,我有一个嵌套列表作为我想要用作输入的序列。
第一次检查:如果

df['nestedList'][0]

输出一个类似[1,2,3]的列表,您就得到了一个嵌套列表。
然后检查更改为输入df['nestedList'][0]时是否仍出现错误。
然后,您的下一步可能是将所有嵌套列表连接成一个非嵌套列表,使用

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

嵌套列表的这种扁平化是从How to make a flat list out of list of lists?借用的。

相关问题