2011-01-12 53 views
73

でこのPythonコード配列要素を設定:誰もが問題を解決するために何をすべきか私を見ることができますとValueError:シーケンス

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. 

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

すると、このエラーメッセージをスローします上記の壊れたコードで、エラーメッセージの投げを止めるようにしますか?


EDIT: 私は行列の内容を取得するには、printコマンドをしたが、これはそれをプリントアウトするものである:

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

は、Aのように見えます5行×13列の行列がありますが、スクリプトによって異なるデータが実行されたときの行数は可変です。これと同じデータを使って、私はこれに追加しています。

EDIT 2:ただし、スクリプトでエラーが発生しています。だから私はあなたの考えがここで起こっている問題を説明しているとは思わない。ありがとう、結構です。他のアイデア?


EDIT 3:

FYI、私はこのコードの問題ライン交換する場合:この代わりと

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.array([1.2, "abc"], dtype=object) 

:あなたが本当に文字列と山車の両方を含むnumpyの配列を持っているしたい場合は、任意のPythonオブジェクトを保持する配列を可能にDTYPE objectを、使用することができますこれがあなたが望むものであるかどうかを判断しないでください。

+0

ありがとうございますが、私はそれが答えではないと思います。私は上記のエラーをスローするときに配列の内容を追加しました。メモ帳に貼り付けて行ごとに調べるとボックスだと私には思われます。他のアイデア? – MedicalMath

+1

あなたの編集が私の問題を解決したようです。私はdtype =オブジェクトを設定する必要がありました。どうもありがとうございました。 – MedicalMath

+0

この質問は完全に答えられました。 – MedicalMath

6

ザ・パイソンとValueError:

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 numpyの配列要素にnumpyの配列の長さ> 1を詰め込むために試みることによっては:

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は答えます。

関連する問題