Nicht gegossen-array-Daten von dtype('O') , dtype('float64')
Ich bin mit scipy ist curve_fit zu passen, eine Funktion, um einige Daten, und Sie erhalten die folgende Fehlermeldung;
Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'
welche Punkte mich zu dieser Zeile in meinem code;
popt_r, pcov = curve_fit(
self.rightFunc, np.array(wavelength)[beg:end][edgeIndex+30:],
np.dstack(transmitted[:,:,c][edgeIndex+30:])[0][0],
p0=[self.m_right, self.a_right])
rightFunc wie folgt definiert ist;
def rightFunc(self, x, m, const):
return np.exp(-(m*x + const))
Wie ich es verstehe, die " O " - Typ bezieht sich auf ein python-Objekt, aber ich kann nicht sehen was diesen Fehler verursacht.
Vollständige Fehlermeldung:
Irgendwelche Ideen, was ich prüfen sollte man die Unterseite dieses?
Was ist der Typ von
die Wellenlänge ist eine python-Liste von floats übertragen ist ein 3d-numpy array (gebaut von numpy.Nullen und dann ausgefüllt später)
Haben Sie versucht, Gießen Sie die array-Typ zu
wavelength
? Sie haben es eingewickelt in einem Aufruf np.array()
, so nehme ich an, es ist nicht ein numpy-array bereits. Vermutlich ist es eine Art von container (python-Liste? Pandas DataFrame
oder Series
? Etwas anderes?). Was bedeutet die Daten in wavelength
Aussehen? Auch Fragen, die gleichen Fragen zu transmitted
.die Wellenlänge ist eine python-Liste von floats übertragen ist ein 3d-numpy array (gebaut von numpy.Nullen und dann ausgefüllt später)
Haben Sie versucht, Gießen Sie die array-Typ zu
float
mit .astype(float)
? das ist mein problem gelöst. mehr info hier.InformationsquelleAutor jm22b | 2016-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel diese
scipy
Funktionen benötigen Parameter wie:wo die Tupel der
aux_values
Durchlaufen, um Ihrefunction
zusammen mit dem aktuellen Wert die wichtigste variable.Ist die
dstack
Ausdruck dieseraux_values
? Oder eine Verkettung von mehreren. Kann es sein müssen, verpackt in einemtuple
.Müssen wir wissen, wo genau dieser Fehler Auftritt, nicht nur die Zeile von deinem code funktioniert es. Wir müssen wissen, was Sie Wert konvertiert wird. Wo gibt es ein array mit den dtype-Objekt?
Es ist
leastsq
funktioniert wie ich vermutete, undcurvefit
packs deine ersten 3 Argumente in dieargs
Tupel. Es ist nicht immer tief inleastsq
, so muss es sein, die überprüfung der dtypes der Eingänge. Also, was ist die "dtype" Ihre Argumente?die Datentypen für die x -, y -, und die beiden Elemente in p0 sind float32
Ein A-dtype oft Ergebnisse bei der Konstruktion eines Arrays aus einer Liste von Teillisten, die in der Größe unterscheiden. Wenn
np.array(...)
können nicht machen eine saubere n-d array von zahlen, resorts, um ein array von Objekten.Ich habe das Problem gelöst. Ich war die übergabe eines array mit einem element, um die p0-Liste, eher als das element selbst. Danke für Eure Hilfe
InformationsquelleAutor hpaulj
Nur für den Fall, es könnte jemand anderes helfen, ich verwendet
numpy.array(wavelength,dtype='float64')
zu zwingen, die Umwandlung der Objekte in der Liste zu numpy ist float64. Funktioniert gut für mich.InformationsquelleAutor Adrine Correya
Nur zur Klarstellung, ich hatte das gleiche problem, nicht die richtigen Antworten in die Kommentare, bevor die Lösung auf meinem eigenen. So dass ich nur wiederhole Sie hier:
Ist, stellen Sie sicher, dass die Tupel von Parametern übergeben werden curve_fit ordentlich gegossen, um ein numpy-array
InformationsquelleAutor MHO
Vom hier, anscheinend numpy Kämpfe mit index-Typ. Die vorgeschlagene Lösung ist:
Funktioniert diese Hilfe?
was ist die "dtype" von
beg
,end
, undedgeIndex
?int, int und numpy.int64, Dass könnte sehr gut das problem sein - werde ich testen, und kommen zurück
Dafür sind Sie alle vom Typ int nicht mein Problem beheben
InformationsquelleAutor NickBraunagel