考虑到我有以下数据:
0.000000000000000000e+00 4.698409927534825670e-01
1.052631578947368363e+00 8.864688755521996200e+00
2.105263157894736725e+00 1.554529316011567630e+01
3.157894736842105310e+00 9.767558170900922931e+00
4.210526315789473450e+00 2.670221074763470881e+01
现在,我想使用此数据进行一些统计分析。
%pylab inline
# Loads numpty
my_data = loadtxt("numbers.dat")
dataxaxis = my_data[:,0]
datayaxis = my_data[:,1]
我知道我将数据存储为变量,因此将第一列用作x轴的xdata,将第二列用作y轴的y数据。
我正在学习curvefit()
函数,该函数在寻找最佳拟合线(LOBF)梯度和截距时与polyfit()
相似。
我了解到,首先我必须定义直线为y = mx+c
的功能。
在这里我感到困惑。
根据讲师的讲,我需要将xdata作为参数,还要定义渐变和拦截作为参数:
def straightline(dataxaxis, m, c):
"Returns values of y according to y = mx + c"
return m*dataxaxis + c
然后我可以这样调用curvefit()
函数:
lineinfo = curve_fit(line, dataxaxis, datayaxis)
lineparams = lineinfo[0]
m = lineparams[0]
c = lineparams[1]
给出了相应的值。
但是,当我调用函数straightline
作为curve_fit
中的第一个参数时,我没有传递任何有关dataxaxis
的信息,也没有传递有关m
或{ {1}}仍然计算梯度和截距以返回矩阵。
这怎么可能?