【问题标题】:Scipy Least Squares 2 squares desired // Error: Result from function call is not a proper array of floatsScipy Least Squares 需要 2 个平方 // 错误:函数调用的结果不是正确的浮点数组
【发布时间】:2018-07-18 05:54:36
【问题描述】:

当前我正在尝试使用 scipy 的最小二乘法或它们的任何最小化函数来最小化具有 5 个参数的函数。

我希望 scipy 做的是使用标准最小二乘法最小化某些函数。

我的代码如下:

 fitfunc1 = lambda p, xx, yy, zz: -(50000*(xx + (p[0] + p[1])*yy +  
 p[3]))/(1.67*(-p[2]*yy + zz + p[4]))

 errfunc1 = lambda p,x11, xx, yy, zz: fitfunc1(p, xx, yy, zz) - x11
 x0 = np.array([0.1, 0.1, 0.1, 0.1, 0.1, 0.1], dtype = float)

res3 = leastsq(errfunc1, x0[:], args=(x1, x, y, z))

其中 x1, x, y, z 都是相同长度的列 numpy 数组,大约 90x1

我目前收到一条错误消息,提示“错误:函数调用的结果不是正确的浮点数组”,我尝试了很多可能性,并尝试按照示例中描述的方式重写它,但没有似乎不起作用。

另外:其实我也想解决这个问题:

最小总和 (f - x1)**2 + (g - x2)**2 其中 f = f(p, x, y, z) 和 g = g(p, x, y, z) 和 x, y, z, x1, y1 都是数据,但试图找到参数 p (6其中)。

目前这在最小二乘中是可能的吗?我曾尝试使用 scipy.minimize,但是当使用 Nedler's Mead 方法完成此操作时,它似乎也不起作用。

这是我当前的代码:

def f(phi, psi, theta, xnot, ynot, znot):
  return sum(abs(   (-50000*(x[:]+ (psi + phi)*y[:] + xnot)/(1.67*(-
   theta*y[:] + z[:] + znot))) - x1[:]) //
  + abs(   (-50000*(-x[:]*(psi + phi) + y[:] + theta*(z[:]) + ynot)/(1.67*(-
  theta*y[:] + z[:] + znot))) - y1[:]))

  x0 = np.array([0.1, 0.1, 0.1, 0.1, 0.1, 0.1], dtype = float)
  res3 = leastsq(f, x0[:], args=(x1, y1, x, y, z))

我觉得我犯了一些对更熟悉的人来说可能很明显的错误,但这是我第一次使用 scipy。非常感谢所有帮助。

【问题讨论】:

    标签: python numpy scipy least-squares minimize


    【解决方案1】:

    我相信你的问题在于变量的形状:

    其中 x1, x, y, z 都是相同长度的列 numpy 数组,大约 90x1

    它会导致您的 fitfunc1errfunc1 函数返回二维数组(形状为 (90,1)),其中 scipy 优化函数需要一个一维数组。 尝试重塑你的数组,例如,

    x1 = x1.reshape((90,)),

    对于其他输入变量也是如此。 这应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-11
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多