2014-05-20 14 views
2

我想使用optimization.curve_fit找到兩個數組之間的最小二乘解,但我不斷收到錯誤:函數調用的結果不是一個合適的數組的花車。我在下面粘貼了我的代碼。任何想法如何解決這一問題?謝謝!scipy.optimize.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) 

回答

3

你的數組有形狀(10,1)。也就是說,它們是二維的,具有平凡的第二維度。在最簡單的情況下,curve_fit需要一維數組。在將它們傳遞到curve_fit之前將pconepctwo平鋪成一維陣列。

例如,這個工程:

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]])) 

(你還沒有看到如何pconepctwo創建它可能是更清潔,以創建爲1-d陣列擺在首位,而不是。稍後壓平它們。)

+0

太好了,謝謝! curve_fit可以使用多維數組,還是隻能在一維情況下使用? – user3658312

+0

只是放在你的陣列,它會反正工作。 – tillsten