scipy.optimize.curve_fit:不是正确的浮点数错误数组

use*_*312 3 floating-point numpy scipy

我正在尝试使用 optimization.curve_fit 来找到两个数组之间的最小二乘解,但我不断收到错误:函数调用的结果不是正确的浮点数组。我在下面粘贴了我的代码。任何想法如何解决这一问题?谢谢!

import numpy as np
import scipy.optimize as optimization

pcone = np.array([[-0.01043151],
  [-0.00135030],
  [-0.02566969],
  [-0.02822495],
  [-0.05463625],
  [-0.00969918],
  [-0.01332421],
  [-0.03364439],
  [-0.04009642],
  [-0.03556982]])

pctwo = np.array([[0.02550008],
  [0.04422852],
  [0.06685288],
  [0.04751296],
  [0.02439405],
  [0.09654185],
  [0.03161849],
  [0.03834721],
  [0.01653997],
  [-0.00802414]])

def func(x, a, b, c):
    return a + b*x + c*x*x

print optimization.curve_fit(func, pcone, pctwo)
Run Code Online (Sandbox Code Playgroud)

War*_*ser 6

您的数组具有形状 (10, 1)。也就是说,它们是二维的,具有微不足道的第二维。在最简单的情况下,curve_fit需要一维数组。拼合pconepctwo成一维数组它们传递给前curve_fit

例如,这有效:

In [8]: curve_fit(func, pcone.ravel(), pctwo.ravel())
Out[8]: 
(array([ 0.05720879,  0.65281483, -2.67840575]),
 array([[  5.90887090e-04,   4.15822858e-02,   6.14439732e-01],
        [  4.15822858e-02,   4.07354227e+00,   6.94784914e+01],
        [  6.14439732e-01,   6.94784914e+01,   1.29240335e+03]]))
Run Code Online (Sandbox Code Playgroud)

(您还没有展示如何创建pconepctwo创建。首先将它们创建为一维数组可能会更清晰,而不是稍后将它们展平。)