Deze Python code:
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()
Gooit deze foutmelding:
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 iemand mij laten zien wat ik moet doen om het probleem in de gebroken code hierboven op te lossen, zodat het stopt met het geven van een foutmelding?
EDIT: Ik deed een print commando om de inhoud van de matrix te krijgen, en dit is wat het afdrukte:
UnFilteredDuringExSummaryOfMeansArray is:
[['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]]
Het lijkt mij een matrix van 5 rijen bij 13 kolommen, hoewel het aantal rijen varieert als verschillende gegevens door het script worden gehaald. Met dezelfde gegevens die ik hier toevoeg.
EDIT 2: Het script geeft echter een foutmelding. Dus ik denk niet dat jouw idee het probleem verklaart dat zich hier voordoet. Maar toch bedankt. Nog andere ideeën?
EDIT 3:
FYI, als ik deze probleemlijn van code vervang:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
met dit in de plaats:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Dan werkt dat deel van het script prima zonder een foutmelding te geven, maar dan deze regel code verderop in het script:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Geeft deze foutmelding:
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
Dus je ziet dat ik het gegevenstype moet specificeren om ylim te kunnen gebruiken in matplotlib, maar toch geeft het specificeren van het gegevenstype de foutmelding die de aanleiding was voor deze post.
Uit de code die u ons liet zien, kunnen we alleen opmaken dat u probeert een array te maken van een lijst die niet de vorm heeft van een multidimensionale array. Bijvoorbeeld
numpy.array([[1,2], [2, 3, 4]])
of
numpy.array([[1,2], [2, [3, 4]]])
zal deze foutmelding opleveren, omdat de vorm van de invoerlijst geen (veralgemeende) "box" is die in een multidimensionale array kan worden omgezet. Dus waarschijnlijk bevat UnFilteredDuringExSummaryOfMeansArray
reeksen van verschillende lengte.
Edit: Een andere mogelijke oorzaak voor deze foutmelding is het proberen om een string te gebruiken als element in een array van het type float
:
numpy.array([1.2, "abc"], dtype=float)
Dat is wat je probeert volgens je bewerking. Als je echt een NumPy array wilt hebben die zowel strings als floats bevat, zou je het dtype object
kunnen gebruiken, waarmee de array willekeurige Python objecten kan bevatten:
numpy.array([1.2, "abc"], dtype=object)
Zonder te weten wat je code moet bereiken, kan ik niet beoordelen of dit is wat je wilt.
The Python ValueError:
ValueError: setting an array element with a sequence.
Betekent precies wat het zegt, je'probeert een reeks getallen in een enkel getallenslot te proppen. Het kan worden gegooid onder verschillende omstandigheden.
1. Wanneer je een python tuple of lijst doorgeeft die geïnterpreteerd moet worden als een 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. Door te proberen een numpy array lengte > 1 in een numpy array element te proppen:
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
Een numpy array wordt aangemaakt, en numpy weet niet hoe het multivalued tuples of arrays in single element slots moet proppen. Het verwacht dat wat je het ook geeft om te evalueren naar een enkel getal, als het'niet, Numpy antwoordt dat het niet'weet hoe een array-element met een sequentie te zetten.
In mijn geval, was het probleem een ander. Ik probeerde lijsten van lijsten van int naar array te converteren. Het probleem was dat er één lijst was met een andere lengte dan de anderen. Als je het wilt bewijzen, moet je doen:
print([i for i,x in enumerate(list) if len(x) != 560])
In mijn geval was de referentie lengte 560.