Denne Python-koden:
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()
Kaster denne feilmeldingen:
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 noen vise meg hva jeg skal gjøre for å løse problemet i den ødelagte koden ovenfor, slik at den slutter å kaste en feilmelding?
EDIT: Jeg gjorde en utskriftskommando for å få innholdet i matrisen, og dette er hva den skrev ut:
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]]
Ser ut som en 5 rad med 13 kolonnematrise for meg, selv om antall rader er variabel når forskjellige data kjøres gjennom skriptet. Med de samme dataene som jeg legger til i dette.
EDIT 2: Skriptet kaster imidlertid en feil. Så jeg tror ikke at ideen din forklarer problemet som skjer her. Takk, skjønt. Noen andre ideer?
EDIT 3:
FYI, hvis jeg bytter ut denne problemlinjen med kode:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
med denne i stedet:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Da fungerer den delen av skriptet fint uten å kaste en feil, men så denne kodelinjen lenger ned på linjen:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
kaster denne feilen:
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 må spesifisere datatypen for å kunne bruke ylim i matplotlib, men likevel spesifiserer datatypen feilmeldingen som startet dette innlegget.
Fra koden du viste oss, er det eneste vi kan fortelle at du prøver å lage en matrise fra en liste som ikke er formet som en flerdimensjonal matrise. For eksempel
numpy.array([[1,2], [2, 3, 4]])
eller
numpy.array([[1,2], [2, [3, 4]]])
vil gi denne feilmeldingen, fordi formen på inndatalisten ikke er en (generalisert) "boks" som kan gjøres om til en flerdimensjonal matrise. Så sannsynligvis inneholder UnFilteredDuringExSummaryOfMeansArray
sekvenser av ulik lengde.
Rediger: En annen mulig årsak til denne feilmeldingen er å prøve å bruke en streng som et element i en matrise av typen float
:
numpy.array([1.2, "abc"], dtype=float)
Det er det du prøver i henhold til redigeringen din. Hvis du virkelig vil ha en NumPy-matrise som inneholder både strenger og flyter, kan du bruke dtype objekt
, som gjør at matrisen kan inneholde vilkårlige Python-objekter:
numpy.array([1.2, "abc"], dtype=object)
Uten å vite hva koden din skal oppnå, kan jeg ikke bedømme om dette er det du ønsker.
The Python ValueError:
ValueError: setting an array element with a sequence.
Betyr nøyaktig hva det står, du' prøver å stappe en sekvens av tall i et enkelt tallspor. Det kan kastes under forskjellige omstendigheter.
1. Når du sender en python tuple eller liste som skal tolkes 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 å prøve å stappe en numpy array lengde > 1 inn i en 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
En numpy array blir opprettet, og numpy ikke vet hvordan å stappe multivalued tuples eller arrays i enkelt element spor. Det forventer hva du gir det til å evaluere til et enkelt tall, hvis det ikke gjør det, svarer Numpy at det ikke vet hvordan du setter et array-element med en sekvens.
I mitt tilfelle var problemet et annet. Jeg prøvde å konvertere lister av lister av int til array. Problemet var at det var en liste med en annen lengde enn andre. Hvis du vil bevise det, må du gjøre det:
print([i for i,x in enumerate(list) if len(x) != 560])
I mitt tilfelle var lengdereferansen 560.