Dieser 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()
Wirft diese Fehlermeldung:
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.
Kann mir jemand zeigen, wie ich das Problem im obigen fehlerhaften Code beheben kann, damit keine Fehlermeldung mehr ausgegeben wird?
EDIT: Ich habe einen Druckbefehl ausgeführt, um den Inhalt der Matrix abzurufen, und das ist das, was ausgedruckt wurde:
UnFilteredDuringExSummaryOfMeansArray ist:
[['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]]
Sieht für mich wie eine Matrix mit 5 Zeilen und 13 Spalten aus, obwohl die Anzahl der Zeilen variabel ist, wenn verschiedene Daten durch das Skript laufen. Mit denselben Daten, die ich hier einfüge.
EDIT 2: Allerdings gibt das Skript einen Fehler aus. Ich glaube also nicht, dass Ihre Idee das Problem erklärt, das hier auftritt. Ich danke Ihnen trotzdem. Irgendwelche anderen Ideen?
EDIT 3:
Zu Ihrer Information, wenn ich diese problematische Codezeile ersetze:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
mit dieser stattdessen:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray)[1:,3]
Dann funktioniert dieser Abschnitt des Skripts einwandfrei, ohne einen Fehler auszulösen, aber dann diese Codezeile weiter unten in der Zeile:
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
Wirft diesen Fehler:
File "mypath\mypythonscript.py", line 3631, in CreateSummaryGraphics
p.ylim(.5*RRDuringArray.min(),1.5*RRDuringArray.max())
TypeError: cannot perform reduce with flexible type
Sie sehen also, dass ich den Datentyp angeben muss, um ylim in Matplotlib verwenden zu können, aber die Angabe des Datentyps führt zu der Fehlermeldung, die diesen Beitrag ausgelöst hat.
Aus dem Code, den Sie uns gezeigt haben, können wir nur erkennen, dass Sie versuchen, ein Array aus einer Liste zu erstellen, die nicht wie ein mehrdimensionales Array geformt ist. Zum Beispiel
numpy.array([[1,2], [2, 3, 4]])
oder
numpy.array([[1,2], [2, [3, 4]]])
führt zu dieser Fehlermeldung, weil die Form der Eingabeliste keine (verallgemeinerte) Box ist, die in ein mehrdimensionales Array umgewandelt werden kann. Wahrscheinlich enthält UnFilteredDuringExSummaryOfMeansArray
also Sequenzen unterschiedlicher Länge.
Edit: Eine weitere mögliche Ursache für diese Fehlermeldung ist der Versuch, eine Zeichenkette als Element in einem Array vom Typ Float
zu verwenden:
numpy.array([1.2, "abc"], dtype=float)
Das ist es, was Sie laut Ihrem Edit versuchen. Wenn Sie wirklich ein NumPy-Array haben wollen, das sowohl Strings als auch Floats enthält, könnten Sie den dtype object
verwenden, der es dem Array ermöglicht, beliebige Python-Objekte zu enthalten:
numpy.array([1.2, "abc"], dtype=object)
Ohne zu wissen, was Ihr Code erreichen soll, kann ich nicht beurteilen, ob es das ist, was Sie wollen.
Der Python ValueError:
ValueError: setting an array element with a sequence.
Bedeutet genau das, was er sagt: Sie versuchen, eine Folge von Zahlen in einen einzigen Zahlenplatz zu packen. Er kann unter verschiedenen Umständen ausgelöst werden.
1. Wenn Sie ein Python-Tupel oder eine Liste übergeben, die als Numpy-Array-Element interpretiert werden soll:
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. Wenn Sie versuchen, eine Numpy-Array-Länge > 1 in ein Numpy-Array-Element zu packen:
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
Es wird ein Numpy-Array erstellt, und Numpy weiß nicht, wie man mehrwertige Tupel oder Arrays in einzelne Element-Slots packen kann. Numpy erwartet, dass alles, was Sie ihm geben, zu einer einzelnen Zahl ausgewertet wird. Wenn das nicht der Fall ist, antwortet Numpy, dass es nicht weiß, wie man ein Array-Element mit einer Sequenz setzt.
In meinem Fall war das Problem ein anderes. Ich habe versucht, Listen von Listen von int in Array zu konvertieren. Das Problem war, dass es eine Liste mit einer anderen Länge als die anderen gab. Wenn Sie es beweisen wollen, müssen Sie es tun:
print([i for i,x in enumerate(list) if len(x) != 560])
In meinem Fall war die Längenangabe 560.