我需要将函数拟合到数据数组并获得该函数的等式的最佳系数。我使用scipy库中的 curve_fit 方法。它基于最小二乘法。
import numpy as np
from scipy.optimize import curve_fit
#This is my function from which i need to get optimal coefficients 'a' and 'b'
def func(x, a, b):
return a*x**(b*x)
#the arrays of input data
x = [1,2,3,4,5]
y =[6,7,8,9,10]
#default (guess) coefficients
p0 = [1, 1]
popt, pcov = curve_fit(func, x, y, p0)
print popt
它返回以下错误
TypeError:**或pow()不支持的操作数类型:'list'和'list'
但是当我使用另一个更简单的功能而没有电源操作时它可以工作
def func(x, a, b):
return a*x + b
必须尝试将数字加权到整个输入数据数组
怎么办?请帮忙......
答案 0 :(得分:6)
看起来你是在追逐元素的力量?
每个i都像a*x[i]**(b*x[i])
一样?
在这种情况下,您必须使用np.power
功能:
def func(x,a,b):
return a*np.power(x,b*x)
然后它有效。
(顺便说一下,将x
和y
从列表转换为numpy数组可能是值得的:np.array(x)
)。