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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4674473/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 16:52:35  来源:igfitidea点击:

ValueError: setting an array element with a sequence

pythonarraysnumpyslice

提问by MedicalMath

This Python code:

这个 Python 代码:

import numpy as p

def firstfunction():
    UnFilteredDuringExSummaryOfMeansArray = []
    MeanOutputHeader=['TestID','ConditionName','FilterType','RRMean','HRMean',
                      'dZdtMaxVoltageMean','BZMean','ZXMean','LVETMean','Z0Mean',
                      'StrokeVolumeMean','CardiacOutputMean','VelocityIndexMean']
    dataMatrix = BeatByBeatMatrixOfMatrices[column]
    roughTrimmedMatrix = p.array(dataMatrix[1:,1:17])


    trimmedMatrix = p.array(roughTrimmedMatrix,dtype=p.float64)  #ERROR THROWN HERE


    myMeans = p.mean(trimmedMatrix,axis=0,dtype=p.float64)
    conditionMeansArray = [TestID,testCondition,'UnfilteredBefore',myMeans[3], myMeans[4], 
                           myMeans[6], myMeans[9], myMeans[10], myMeans[11], myMeans[12],
                           myMeans[13], myMeans[14], myMeans[15]]
    UnFilteredDuringExSummaryOfMeansArray.append(conditionMeansArray)
    secondfunction(UnFilteredDuringExSummaryOfMeansArray)
    return

def secondfunction(UnFilteredDuringExSummaryOfMeansArray):
    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
    return

firstfunction()

Throws this error message:

抛出此错误消息:

File "mypath\mypythonscript.py", line 3484, in secondfunction
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
ValueError: setting an array element with a sequence.

Can anyone show me what to do to fix the problem in the broken code above so that it stops throwing an error message?

谁能告诉我如何解决上面损坏的代码中的问题,以便它停止抛出错误消息?



EDIT:I did a print command to get the contents of the matrix, and this is what it printed out:

编辑:我做了一个打印命令来获取矩阵的内容,这就是它打印出来的内容:

UnFilteredDuringExSummaryOfMeansArray is:

UnFilteredDuringExSummaryOfMeansArray 是:

[['TestID', 'ConditionName', 'FilterType', 'RRMean', 'HRMean', 'dZdtMaxVoltageMean', 'BZMean', 'ZXMean', 'LVETMean', 'Z0Mean', 'StrokeVolumeMean', 'CardiacOutputMean', 'VelocityIndexMean'],
[u'HF101710', 'PreEx10SecondsBEFORE', 'UnfilteredBefore', 0.90670000000000006, 66.257731979420001, 1.8305673000000002, 0.11750000000000001, 0.15120546389880002, 0.26870546389879996, 27.628261216480002, 86.944190346160013, 5.767261352345999, 0.066259118585869997],
[u'HF101710', '25W10SecondsBEFORE', 'UnfilteredBefore', 0.68478571428571422, 87.727887206978565, 2.2965444125714285, 0.099642857142857144, 0.14952476549885715, 0.24916762264164286, 27.010483303721429, 103.5237336525, 9.0682762747642869, 0.085022572648242867],
[u'HF101710', '50W10SecondsBEFORE', 'UnfilteredBefore', 0.54188235294117659, 110.74841107829413, 2.6719262705882354, 0.077705882352917643, 0.15051306356552943, 0.2282189459185294, 26.768787504858825, 111.22827075238826, 12.329456404418824, 0.099814258468417641],
[u'HF101710', '75W10SecondsBEFORE', 'UnfilteredBefore', 0.4561904761904762, 131.52996981880955, 3.1818159523809522, 0.074714285714290493, 0.13459344175047619, 0.20930772746485715, 26.391156337028569, 123.27387909873812, 16.214243779323812, 0.1205685359981619]]

Looks like a 5 row by 13 column matrix to me, though the number of rows is variable when different data are run through the script. With this same data that I am adding in this.

对我来说看起来像一个 5 行 x 13 列的矩阵,尽管当通过脚本运行不同的数据时,行数是可变的。使用我在此添加的相同数据。

EDIT 2: However, the script is throwing an error. So I do not think that your idea explains the problem that is happening here. Thank you, though. Any other ideas?

编辑 2:但是,脚本抛出错误。所以我不认为你的想法解释了这里发生的问题。不过还是谢谢你。还有其他想法吗?



EDIT 3:

编辑 3:

FYI, if I replace this problem line of code:

仅供参考,如果我替换此问题代码行:

    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]

with this instead:

用这个代替:

    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]

Then that section of the script works fine without throwing an error, but then this line of code further down the line:

然后脚本的那部分工作正常而不会引发错误,但是这行代码更进一步:

p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())

Throws this error:

抛出这个错误:

File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
  p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type

So you can see that I need to specify the data type in order to be able to use ylim in matplotlib, but yet specifying the data type is throwing the error message that initiated this post.

所以你可以看到我需要指定数据类型才能在 matplotlib 中使用 ylim,但是指定数据类型会抛出启动这篇文章的错误消息。

采纳答案by Sven Marnach

From the code you showed us, the only thing we can tell is that you are trying to create an array from a list that isn't shaped like a multi-dimensional array. For example

从您向我们展示的代码中,我们唯一可以判断的是您正在尝试从一个形状不像多维数组的列表中创建一个数组。例如

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

or

或者

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

will yield this error message, because the shape of the input list isn't a (generalised) "box" that can be turned into a multidimensional array. So probably UnFilteredDuringExSummaryOfMeansArraycontains sequences of different lengths.

将产生此错误消息,因为输入列表的形状不是可以变成多维数组的(广义)“盒子”。所以可能UnFilteredDuringExSummaryOfMeansArray包含不同长度的序列。

Edit: Another possible cause for this error message is trying to use a string as an element in an array of type float:

编辑:此错误消息的另一个可能原因是尝试将字符串用作类型数组中的元素float

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

That is what you are trying according to your edit. If you really want to have a NumPy array containing both strings and floats, you could use the dtype object, which enables the array to hold arbitrary Python objects:

这就是您根据您的编辑所尝试的。如果你真的想要一个包含字符串和浮点数的 NumPy 数组,你可以使用 dtype object,它使数组能够保存任意 Python 对象:

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

Without knowing what your code shall accomplish, I can't judge if this is what you want.

在不知道您的代码将完成什么的情况下,我无法判断这是否是您想要的。

回答by Eric Leschinski

The Python ValueError:

Python 值错误:

ValueError: setting an array element with a sequence.

Means exactly what it says, you're trying to cram a sequence of numbers into a single number slot. It can be thrown under various circumstances.

意思就是它所说的,您试图将一系列数字塞入一个数字槽中。它可以在各种情况下抛出。

1. When you pass a python tuple or list to be interpreted as a numpy array element:

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. By trying to cram a numpy array length > 1 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

A numpy array is being created, and numpy doesn't know how to cram multivalued tuples or arrays into single element slots. It expects whatever you give it to evaluate to a single number, if it doesn't, Numpy responds that it doesn't know how to set an array element with a sequence.

正在创建一个 numpy 数组,而 numpy 不知道如何将多值元组或数组塞入单个元素槽中。它期望你给它的任何东西都评估为一个单一的数字,如果不是,Numpy 会回应它不知道如何使用序列设置数组元素。

回答by Andrés M. Jiménez

In my case, the problem was another. I was trying convert lists of lists of int to array. The problem was that there was one list with a different length than others. If you want to prove it, you must do:

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

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

In my case, the length reference was 560.

就我而言,长度参考是 560。

回答by Aaditya Ura

In my case , I got this Error in Tensorflow , Reason was i was trying to feed a array with different length or sequences :

就我而言,我在 Tensorflow 中遇到了这个错误,原因是我试图提供一个具有不同长度或序列的数组:

example :

例子 :

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)

And if my array is :

如果我的数组是:

example_array = [[1,2,3],[1,2]]

Then i will get error :

然后我会得到错误:

ValueError: setting an array element with a sequence.

but if i do padding then :

但如果我做填充然后:

example_array = [[1,2,3],[1,2,0]]

Now it's working.

现在它正在工作。

回答by Adam Liu

for those who are having trouble with similar problems in Numpy, a very simple solution would be:

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

defining dtype=objectwhen defining an array for assigning values to it. for instance:

定义dtype=object限定的阵列用于向它分配值时。例如:

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

回答by Max Kleiner

In my case, the problem was with a scatterplot of a dataframe X[]:

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