3
我試圖將指數律應用到我的數據中。我的(x,y)
樣本是相當複雜的解釋,所以爲了一般的理解和再現性,我會說:這兩個變量是float
和continuous
,0<=x<=100
和0<=y<=1
。錯誤的圖表scipy.optimize.curve_fit(類似於移動平均數)
from scipy.optimize import curve_fit
import numpy
import matplotlib.pyplot as plt
#ydata=[...] is my list with y values, which contains 0 values
#xdata=[...] is my list with x values
transf_y=[]
for i in range(len(ydata)):
transf_y.append(ydata[i]+0.00001) #Adding something to avoid zero values
x=numpy.array(xdata,dtype=float)
y=numpy.array(transf_y,dtype=float)
def func(x, a, c, d):
return a * numpy.exp(-c*x)+d
popt, pcov = curve_fit(func, x, y,p0 = (1, 1e-6, 1))
print ("a = %s , c = %s, d = %s" % (popt[0], popt[1], popt[2]))
xx = numpy.linspace(300, 6000, 1000)
yy = func(xx, *popt)
plt.plot(x,y,label='Original Data')
plt.plot(xx, yy, label="Fitted Curve")
plt.legend(loc='upper left')
plt.show()
現在我的擬合曲線看起來不像擬合的指數曲線。相反,它看起來像一條移動平均曲線,就好像這條曲線在Excel上添加爲趨勢線一樣。 可能是什麼問題?如果有必要,我會找到一種方法來使數據集可用,使示例可重現。
這是我走出我的代碼(我甚至不知道爲什麼我的傳說越來越三個要素,而只有兩個繪製,至少表面上):
所以唯一的大問題是我的數據沒有排序。我真的認爲這是自動完成的。我真的錯了。 – FaCoffee
是的。而這只是一種混亂的情節,配件是好的。 –