Denne Python-kode:
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()
Skalder denne fejlmeddelelse:
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.
Kan nogen vise mig, hvad jeg skal gøre for at løse problemet i den ødelagte kode ovenfor, så den holder op med at sende en fejlmeddelelse?
EDIT: Jeg lavede en print-kommando for at få indholdet af matrixen, og dette er hvad den udskrev:
UnFilteredDuringExSummaryOfMeansArray er:
[['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]]
Det ligner en matrix med 5 rækker og 13 kolonner for mig, selv om antallet af rækker er variabelt, når forskellige data køres gennem scriptet. Med de samme data, som jeg tilføjer i denne.
EDIT 2: Scriptet kaster dog en fejl. Så jeg tror ikke, at din idé forklarer det problem, der sker her. Men tak alligevel. Andre ideer?
EDIT 3:
Til din information, hvis jeg erstatter denne problemkode-linje:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
med dette i stedet:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Så virker den del af scriptet fint uden at der kommer en fejl, men så kommer denne kodelinje længere nede i linjen:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
kaster denne fejl:
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
Så du kan se, at jeg skal angive datatypen for at kunne bruge ylim i matplotlib, men alligevel kaster angivelsen af datatypen den fejlmeddelelse, der indledte dette indlæg.
Ud fra den kode, du viste os, kan vi kun se, at du forsøger at oprette et array fra en liste, der ikke er formet som et flerdimensionalt array. For eksempel
numpy.array([[1,2], [2, 3, 4]])
eller
numpy.array([[1,2], [2, [3, 4]]])
vil give denne fejlmeddelelse, fordi formen af inputlisten ikke er en (generaliseret) "boks" der kan omdannes til et flerdimensionalt array. Så sandsynligvis indeholder UnFilteredDuringExSummaryOfMeansArray
sekvenser af forskellige længder.
Rediger: En anden mulig årsag til denne fejlmeddelelse er at forsøge at bruge en streng som et element i et array af typen float
:
numpy.array([1.2, "abc"], dtype=float)
Det er det, du forsøger ifølge din redigering. Hvis du virkelig ønsker at have et NumPy-array, der indeholder både strenge og floats, kan du bruge dtypen object
, som gør det muligt for arrayet at indeholde vilkårlige Python-objekter:
numpy.array([1.2, "abc"], dtype=object)
Uden at vide, hvad din kode skal opnå, kan jeg ikke vurdere, om det er det, du ønsker.
Den Python ValueError:
ValueError: setting an array element with a sequence.
Betyder præcis, hvad den siger, du forsøger at proppe en sekvens af tal ind i en enkelt talplads. Den kan blive kastet under forskellige omstændigheder.
1. Når du afleverer en python-tupel eller liste, der skal fortolkes som et numpy array-element:
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. Ved at forsøge at proppe en numpy array-længde > 1 ind i et numpy array-element:
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
Der oprettes et numpy-array, og numpy doesn't ved, hvordan man propper multivalente tupler eller arrays ind i slots med et enkelt element. Den forventer, at det, du giver den, evalueres til et enkelt tal, hvis det ikke gør det, svarer Numpy, at den ikke ved, hvordan den skal sætte et arrayelement med en sekvens.
I mit tilfælde var problemet et andet. Jeg forsøgte at konvertere lister af lister af lister af int til array. Problemet var, at der var en liste med en anden længde end de andre. Hvis du vil bevise det, skal du gøre det:
print([i for i,x in enumerate(list) if len(x) != 560])
I mit tilfælde var længdehenvisningen 560.