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

问题描述 投票:0回答:10

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

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

...都报以下错误?

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

python arrays numpy slice
10个回答
349
投票

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

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

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 数组,你可以使用 dtype

object
,它允许数组保存任意 Python 对象:

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

85
投票

Python 值错误:

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 回应说它不知道如何用序列设置数组元素。


25
投票

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

现在可以了。


12
投票

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

defining

dtype=object
在定义一个数组给它赋值的时候。例如:

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

6
投票

就我而言,问题是另一个。我正在尝试将 int 列表的列表转换为数组。问题是有一个列表的长度与其他列表不同。如果你想证明它,你必须做:

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

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


2
投票

就我而言,问题出在数据框 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)

1
投票

当形状不规则或元素的数据类型不同时,传递给np.array的

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

``


1
投票

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

首先检查:如果

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 lists of lists?.


0
投票

错误是因为np.array函数的dtype参数指定了数组中元素的数据类型,只能设置为兼容所有元素的单一数据类型。值“abc”不是有效的浮点数,因此尝试将其转换为浮点数会导致 ValueError。为避免此错误,您可以从列表中删除字符串元素,或选择可以同时处理浮点值和字符串值的不同数据类型,例如对象。

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

0
投票

list = dataframe['数量'].tolist()

x = np.asarray(列表)

我收到以下错误: ValueError:设置带有序列的数组元素。请求的数组在 1 维后具有不均匀的形状。检测到的形状是 (8,) + 不均匀部分。

© www.soinside.com 2019 - 2024. All rights reserved.