2011-01-12 13 views
73

यह अजगर कोड एक दृश्य के साथ एक सरणी तत्व की स्थापना: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() 

यह त्रुटि संदेश फेंकता ऊपर टूटे हुए कोड में ताकि यह एक त्रुटि संदेश फेंकना बंद कर दे?


संपादित करें: मैं मैट्रिक्स की सामग्री को पाने के लिए एक प्रिंट आदेश किया था, और यह कि यह क्या बाहर मुद्रित है:

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

एक तरह लग रहा है मेरे लिए 13 कॉलम मैट्रिक्स द्वारा 5 पंक्ति, हालांकि पंक्तियों की संख्या भिन्न होती है जब स्क्रिप्ट के माध्यम से अलग-अलग डेटा चलाए जाते हैं। इस डेटा के साथ मैं इसमें जोड़ रहा हूं।

EDIT 2: हालांकि, स्क्रिप्ट एक त्रुटि फेंक रही है। इसलिए मुझे नहीं लगता कि आपका विचार उस समस्या को बताता है जो यहां हो रहा है। फिर भी आपका धन्यवाद। कोई अन्य विचार?


संपादित करें 3:

FYI करें, अगर मैं कोड की इस समस्या को लाइन की जगह:

RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3] 
इस बजाय साथ

:

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

तब के उस अनुभाग स्क्रिप्ट एक त्रुटि फेंकने के बिना ठीक काम करता है, लेकिन फिर कोड की यह पंक्ति आगे लाइन नीचे:

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 उपयोग करने में सक्षम होने के लिए डेटा प्रकार निर्दिष्ट करने की आवश्यकता है, लेकिन अभी तक डेटा को निर्दिष्ट:

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

इस त्रुटि फेंकता प्रकार इस संदेश को शुरू करने वाले त्रुटि संदेश को फेंक रहा है।

उत्तर

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 सरणी है करना चाहते हैं, तो आप dtype object, जो मनमाने ढंग से अजगर वस्तुओं धारण करने के लिए सक्षम बनाता है सरणी इस्तेमाल कर सकते हैं: बिना जाने

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

क्या अपने कोड को पूरा करेगा, मैं कर सकते हैं ' अगर आप यही चाहते हैं तो न्यायाधीश बनें।

+0

धन्यवाद, लेकिन मुझे नहीं लगता कि यह जवाब है। जब मैंने ऊपर की त्रुटि फेंक दी है तो मैंने सरणी की सामग्री को जोड़ा है। और ऐसा लगता है कि यह एक बॉक्स है जब मैं इसे नोटपैड में पेस्ट करता हूं और लाइन से लाइन की जांच करता हूं। कोई अन्य विचार? – MedicalMath

+1

आपके संपादन में मेरी समस्या हल हो गई है। मुझे dtype = ऑब्जेक्ट सेट करने की आवश्यकता थी। आपका बहुत बहुत धन्यवाद। – MedicalMath

+0

इस प्रश्न का पूरी तरह उत्तर दिया गया है। – MedicalMath

6

अजगर ValueError:

ValueError: setting an array element with a sequence. 

मतलब यह वास्तव में क्या कहते हैं, आप एक ही नंबर स्लॉट में संख्या का एक अनुक्रम रटना करने की कोशिश कर रहे हैं। इसे विभिन्न परिस्थितियों में फेंक दिया जा सकता है।

1. जब आप एक अजगर टपल या सूची से पारित एक 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 सरणी तत्व में एक 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 एक तत्व स्लॉट में बहुमान tuples या सरणियों रटना करने के लिए कैसे पता नहीं है। यह अपेक्षा करता है कि जो कुछ भी आप इसे एक नंबर पर मूल्यांकन करने के लिए देते हैं, यदि ऐसा नहीं होता है, तो नोम्पी प्रतिक्रिया देता है कि यह अनुक्रम के साथ सरणी तत्व को सेट करने का तरीका नहीं जानता है।

संबंधित मुद्दे