首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ValueError:使用序列设置数组元素

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

Stack Overflow用户
提问于 2011-01-13 05:58:20
回答 8查看 1.2M关注 0票数 243

这段Python代码:

代码语言:javascript
运行
复制
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()

抛出此错误消息:

代码语言:javascript
运行
复制
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.

有没有人能告诉我该怎么修复上面代码中的问题,让它不再抛出错误消息?

EDIT:我执行了一个打印命令来获取矩阵的内容,打印结果如下:

UnFilteredDuringExSummaryOfMeansArray是:

代码语言:javascript
运行
复制
[['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]]

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

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

EDIT 3:

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

代码语言:javascript
运行
复制
    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]

取而代之的是:

代码语言:javascript
运行
复制
    RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]

然后脚本的这一部分就可以正常工作,而不会抛出错误,但是下面这行代码:

代码语言:javascript
运行
复制
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())

抛出此错误:

代码语言:javascript
运行
复制
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
  p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-01-13 07:51:27

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

代码语言:javascript
运行
复制
numpy.array([[1,2], [2, 3, 4]])          # wrong!

代码语言:javascript
运行
复制
numpy.array([[1,2], [2, [3, 4]]])        # wrong!

将产生此错误消息,因为输入列表的形状不是可以转换为多维数组的(泛化的)“框”。因此,UnFilteredDuringExSummaryOfMeansArray可能包含不同长度的序列。

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

代码语言:javascript
运行
复制
numpy.array([1.2, "abc"], dtype=float)   # wrong!

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

代码语言:javascript
运行
复制
numpy.array([1.2, "abc"], dtype=object)

如果不知道你的代码应该完成什么,我就不知道这是不是你想要的。

票数 304
EN

Stack Overflow用户

发布于 2017-11-25 12:40:49

Python ValueError:

代码语言:javascript
运行
复制
ValueError: setting an array element with a sequence.

意思就像它说的那样,你试图把一个数字序列塞进一个数字槽中。它可以在各种情况下抛出。

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

代码语言:javascript
运行
复制
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

通过尝试将一个大于1的数组长度塞进一个numpy数组元素中:

代码语言:javascript
运行
复制
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会回应说它不知道如何用序列设置数组元素。

票数 75
EN

Stack Overflow用户

发布于 2018-04-03 03:20:31

在我的例子中,我在Tensorflow中得到了这个错误,原因是我试图提供不同长度或序列的数组:

示例:

代码语言:javascript
运行
复制
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)

如果我的数组是:

代码语言:javascript
运行
复制
example_array = [[1,2,3],[1,2]]

然后我会得到错误:

代码语言:javascript
运行
复制
ValueError: setting an array element with a sequence.

但是如果我做填充的话:

代码语言:javascript
运行
复制
example_array = [[1,2,3],[1,2,0]]

现在它起作用了。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4674473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档