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, was zu tun ist, um das Problem im fehlerhaften Code oben zu beheben, damit keine Fehlermeldung mehr ausgegeben wird?
BEARBEITEN: Ich habe einen Druckbefehl ausgeführt, um den Inhalt der Matrix abzurufen, und dies wurde ausgedruckt:
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 mal 13 Spalten aus, obwohl die Anzahl der Zeilen variabel ist, wenn verschiedene Daten durch das Skript ausgeführt werden. Mit den gleichen Daten, die ich hier hinzufüge.
EDIT 2 : Das Skript gibt jedoch einen Fehler aus. Ich glaube also nicht, dass Ihre Idee das Problem erklärt, das hier auftritt. Trotzdem danke. Irgendwelche anderen Ideen?
EDIT 3:
Zu Ihrer Information, wenn ich diese Problemcodezeile ersetze:
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
damit 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:
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. Wenn Sie jedoch den Datentyp angeben, wird die Fehlermeldung ausgegeben, die diesen Beitrag ausgelöst hat.
Antworten:
Anhand des Codes, 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. Beispielsweise
oder
gibt diese Fehlermeldung aus, da die Form der Eingabeliste kein (verallgemeinertes) "Feld" ist, das in ein mehrdimensionales Array umgewandelt werden kann.
UnFilteredDuringExSummaryOfMeansArray
Enthält also wahrscheinlich Sequenzen unterschiedlicher Länge.Bearbeiten : Eine weitere mögliche Ursache für diese Fehlermeldung ist der Versuch, eine Zeichenfolge als Element in einem Array vom Typ zu verwenden
float
:Das ist es, was Sie entsprechend Ihrer Bearbeitung versuchen. Wenn Sie wirklich ein NumPy-Array haben möchten, das sowohl Zeichenfolgen als auch Floats enthält, können Sie den Typ dtype verwenden
object
, mit dem das Array beliebige Python-Objekte enthalten kann:Ohne zu wissen, was Ihr Code leisten soll, kann ich nicht beurteilen, ob Sie dies wünschen.
quelle
__getitem__
wie hier angegeben implementiert werden: github.com/numpy/numpy/issues/5100Der Python ValueError:
Bedeutet genau das, was darin steht: Sie versuchen, eine Folge von Zahlen in einen einzelnen Zahlenschlitz zu packen. Es kann unter verschiedenen Umständen geworfen werden.
1. Wenn Sie ein Python-Tupel oder eine Python-Liste übergeben, die als numpy-Array-Element interpretiert werden soll:
2. Indem Sie versuchen, eine Numpy-Array-Länge> 1 in ein Numpy-Array-Element zu packen:
Ein Numpy-Array wird erstellt, und Numpy weiß nicht, wie mehrwertige Tupel oder Arrays in Einzelelement-Slots gepackt werden sollen. Es erwartet, dass alles, was Sie ihm geben, zu einer einzelnen Zahl ausgewertet wird. Wenn dies nicht der Fall ist, antwortet Numpy, dass es nicht weiß, wie ein Array-Element mit einer Sequenz festgelegt werden soll.
quelle
In meinem Fall habe ich diesen Fehler in Tensorflow erhalten. Grund war, dass ich versucht habe, ein Array mit unterschiedlicher Länge oder Sequenzen zu füttern:
Beispiel:
Und wenn mein Array ist:
Dann bekomme ich Fehler:
aber wenn ich polster mache dann:
Jetzt geht es.
quelle
Für diejenigen, die Probleme mit ähnlichen Problemen in Numpy haben, wäre eine sehr einfache Lösung:
Definieren
dtype=object
beim Definieren eines Arrays zum Zuweisen von Werten. zum Beispiel:quelle
Edit
Teil der akzeptierten Antwort?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 andere gab. Wenn Sie es beweisen wollen, müssen Sie Folgendes tun:
In meinem Fall betrug die Längenreferenz 560.
quelle
In meinem Fall lag das Problem bei einem Streudiagramm eines Datenrahmens X []:
quelle