0

以下の非常に単純な例 (既知の結果 `a=b=0 で直線y=ax+bを当てはめる) では、x 変数が float32 型として提供されると、SciPy の curve_fit 関数は間違った結果を生成します。

import numpy as np
import scipy.optimize as opt

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

x = np.array([0,1])
y = np.array([0,0])
p0 = [0.1, 0.1]
p1 = opt.curve_fit(func,            x , y, p0=p0)
p2 = opt.curve_fit(func, np.float64(x), y, p0=p0)
p3 = opt.curve_fit(func, np.float32(x), y, p0=p0)

print '\n p1 = ',p1,'\n p2 = ',p2,'\n p3 = ',p3

出力が得られます。

p1 =  (array([ 0.,  0.]), inf) 
p2 =  (array([ 0.,  0.]), inf) 
p3 =  (array([ 0.1,  0.1]), inf)

最後の結果 (float32-input で取得) が他の 2 つと異なり、明らかに間違っているのはなぜですか? 当てはめ結果 p3 が初期推定p0curve_fitに等しいため、 は 1 回の反復も実行していないようです。私には、これはバグのように思えます...

4

0 に答える 0