Verwendung von curve_fit passen Daten
Ich bin neu in scipy und matplotlib, und ich habe versucht, fit-Funktionen auf die Daten. Das erste Beispiel in der Scipy Kochbuch funktioniert fantastisch, aber wenn ich versuche es mit Punkten aus einer Datei gelesen, die ersten Koeffizienten gebe ich (p0 unten) scheinen nie zu ändern, und die Kovarianz-matrix ist immer INF.
Ich habe versucht zu passen, auch die Daten nach einer Zeile, ohne Erfolg. Ist es ein problem mit der Art und Weise ich die Daten zu importieren? Wenn ja, gibt es einen besseren Weg, es zu tun?
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import scipy as sy
with open('data.dat') as f:
noms = f.readline().split('\t')
dtipus = [('x', sy.float32)] + [('y', sy.float32)]
data = sy.loadtxt(f,delimiter='\t',dtype=dtipus)
x = data['x']
y = data['y']
def func(x, a, b, c):
return a*x**b + c
p0 = sy.array([1,1,1])
coeffs, matcov = curve_fit(func, x, y, p0)
yaj = func(x, coeffs[0], coeffs[1], coeffs[2])
print(coeffs)
print(matcov)
plt.plot(x,y,'x',x,yaj,'r-')
plt.show()
Dank!
InformationsquelleAutor Ironil | 2012-06-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es mir, dass das problem ist ja auch, wie Sie Daten importieren. Faking diese datafile:
und mit der
pylab
'sloadtxt
Funktion zum Lesen:funktioniert für mich. Durch die Art und Weise, die Sie verwenden können,dtypes, um den Namen der Spalten.
InformationsquelleAutor ev-br
Das zugrunde liegende problem mit Ihrem laden von Daten ist, dass Sie wirken, float32, aber in scipy 0.10.1, curve_fit arbeitet mit float64 aber nicht float32 (es ist ein bug, kein feature). Dein Beispiel funktioniert mit float64.
InformationsquelleAutor Stephen