Python 如何正确定义scipy'的向量函数;s曲线拟合

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

我有一个问题,在尝试曲线拟合时,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], 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.]]