【问题标题】:Least Linear Squares: scipy.optimize.curve_fit() throws "Result from function call is not a proper array of floats."最小线性平方:scipy.optimize.curve_fit() 抛出“函数调用的结果不是正确的浮点数组。”
【发布时间】:2017-05-26 19:18:15
【问题描述】:

我现在正在尝试实现一个 python 代码,它计算矩阵方程的最小二乘误差

首先,我有一些二维数据 XDATA(浮点数组数组),形状 100,9 其次,我有一些 2 维 YDATA,形状 100,3 我的函数从 9 个条目和 3 个未知参数的数组中创建了一个由 3 个条目组成的数组。 所以我试图通过线性最小二乘估计这些参数:

#linear regression
#Messured Data
xdata = np.array(data[0:9])
xdata = xdata.astype(np.float)
xdata = np.transpose(xdata)
#True y
ydata = np.array(data[9:12])
ydata = ydata.astype(np.float)
ydata = np.transpose(ydata)

#Timestamps
size = np.size(xdata)/np.size(xdata[0])

def func(xdata,m1,m2,g):
    y_est = []
    for x in xdata:
        u_est = []
        u_est.append((m1+m2)*(x[6]+g))
        u_est.append(m2*(2*x[5]*x[4]*x[2]+(x[2]**2)*x[7]))
        u_est.append(m2*(x[8]-x[2]*(x[4]**2)))
        y_est.append(u_est)
    y_est = np.array(y_est)
    return y_est

print (curve_fit(func,xdata,ydata))

但它引发了一个我(还)无法修复的错误: Error

【问题讨论】:

  • 看起来你的 Y 数据是多维的。 curve_fit 要求输出数组是一维的。你可以看看this questionthis one
  • 向我们展示 func 为典型输入生成的内容。
  • func 从包含 9 个条目的数组数据数组中生成一个包含 3 个条目 [x][3] 的数组数组 [x][9] 在完整 xdata 上运行 func 返回每个数组的计算 ydata输入 xdata ,但我需要估计未给出的参数 (m1,m2,g)。 curve_fit 和 lstsq 抛出相同的错误(见上文)

标签: python arrays optimization scipy least-squares


【解决方案1】:

curve_fit 解决了非线性最小二乘问题。对于线性最小二乘,最好使用lsq_linearnumpy.lstsq

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2019-02-14
    • 1970-01-01
    • 2018-07-18
    相关资源
    最近更新 更多