Python 如何正确定义scipy'的向量函数;s曲线拟合
我有一个问题,在尝试曲线拟合时,python如何为x数组计算(f1(x),f2(x))形式的向量函数Python 如何正确定义scipy'的向量函数;s曲线拟合,python,numpy,vector,scipy,curve-fitting,Python,Numpy,Vector,Scipy,Curve Fitting,我有一个问题,在尝试曲线拟合时,python如何为x数组计算(f1(x),f2(x))形式的向量函数 import numpy as np from scipy.optimize import curve_fit def func(x,a,b,c): return np.array([a*x**b+c,a*x**b+c+1]) ydata = np.array([[1,2],[3,4],[5,6],[7,8]],dtype=float) xdata=np.array([1,2,3,4
import numpy as np
from scipy.optimize import curve_fit
def func(x,a,b,c):
return np.array([a*x**b+c,a*x**b+c+1])
ydata = np.array([[1,2],[3,4],[5,6],[7,8]],dtype=float)
xdata=np.array([1,2,3,4], dtype=float)
popt,pcov = curve_fit(func, xdata, ydata)
给出“ValueError:操作数无法与形状(2,4)(4,2)一起广播”
转换要安装的数据:
ydata=np.array([[1,2],[3,4],[5,6],[7,8]],dtype=float).transpose()
给出“TypeError:输入不正确:N=3不能超过M=2”,因为现在我的函数值比参数少。好吧,我知道为什么我不能适应。所以我需要转换函数值:
def func(x,a,b,c):
return np.array([a*x**b+c,a*x**b+c+1]).transpose()
这给了我“函数调用的结果不是正确的浮点数组。”
我如何从这样的问题中得到解决方案?从数学上讲,如果数据能够拟合模型,则应该很好地确定。
curve\u fit
需要返回1D数组的func
,因此输出应平坦化。在这种情况下,您应该输入ydata.T.ravel()
到curve\u fit
,以使func(x,a,b,c)
的元素具有正确的顺序
测试结果,
func(xdata,*popt).reshape(-1,len(xdata)).T
# [[ 1., 2.],
# [ 3., 4.],
# [ 5., 6.],
# [ 7., 8.]]
您可能也对我的回答感兴趣:
func(xdata,*popt).reshape(-1,len(xdata)).T
# [[ 1., 2.],
# [ 3., 4.],
# [ 5., 6.],
# [ 7., 8.]]