2011-01-12 53 views
73

这个Python代码:ValueError异常:设置一个数组元素与序列

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() 

抛出此错误消息:

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. 

谁能告诉我该怎么做来解决这个问题在上面的破碎的代码,以便它停止抛出错误消息?


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

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]] 

看起来像5行13列矩阵给我,尽管当不同的数据通过脚本运行时行数是可变的。有了我在这添加的相同数据。

编辑2:但是,该脚本正在抛出一个错误。所以我不认为你的想法解释了这里发生的问题。不过谢谢你。任何其他想法?


EDIT 3:

仅供参考,如果我更换这个问题行代码:

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

与此相反:

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

接着的那个部脚本可以正常工作而不会抛出错误,但是这一行代码更进一步上下行:

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

抛出这个错误:

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,但尚未指定数据类型抛出启动此帖子的错误消息。

回答

122

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

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

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

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

编辑:另一个可能的原因此错误消息试图在float类型的数组使用字符串作为一个元素:

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

这就是你根据你的编辑尝试。如果你真的想有一个包含字符串和彩车NumPy的数组,你可以使用D型object,使数组保存任意Python对象:

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

不知道你的代码必须如期完成,我可以”判断这是你想要的。

+0

谢谢,但我不认为这是答案。当它抛出上面的错误时,我添加了数组的内容。在我看来,它是一个盒子,当我将它粘贴到记事本中并逐行检查时。任何其他想法? – MedicalMath

+1

您的编辑似乎解决了我的问题。我需要设置dtype =对象。非常感谢你。 – MedicalMath

+0

此问题已完全解答。 – MedicalMath

6

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.试图填满一个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回应说它不知道如何设置一个序列的数组元素。

相关问题