2016-09-22 80 views
0

私はscipy.optimize curve_fitを複数の変数を使って使用しようとしています。それは私が作成したテストコードで正常に動作しますが、私は私の実際のデータにこれを実装しようとすると、次のエラー多変数非線形curve_fit with scipy

TypeError: only arrays length -1 can be converted to python scalars

私のテストコード内の配列とその要素のデータ型の形状を取得しておくと、実際のコードはまったく同じなので、なぜこのエラーが出るのか混乱しています。

テストコード:

import numpy as np 
    import scipy 
    from scipy.optimize import curve_fit 

    def func(x,a,b,c): 
      return a+b*x[0]**2+c*x[1] 
    x_0=np.array([1,2,3,4]) 
    x_1=np.array([5,6,7,8]) 
    X=scipy.array([x_0,x_1]) 
    Y=func(X,3.1,2.2,2.1) 
    popt, pcov=curve_fit(func,X,Y) 

実際のコード:

f=open("Exp_Fresnal.csv", 'rb') 
    reader=csv.reader(f) 
    for row in reader: 
     Qz.append(row[0]) 
     Ref.append(row[1]) 
     Ref_F.append(row[2]) 
    Qz_arr,Ref_Farr=scipy.array((Qz)),scipy.array((Ref_F)) 
    x=scipy.array([Qz_arr,Ref_Farr] 

    def func(x,d,sig_int,sig_cp): 
     return x[1]*(x[0]*d*(math.exp((-sig_int**2)*(x[0]**2)/2)/(1-cmath.exp(complex(0,1)*x[0]*d)*math.exp((-sig_cp**2)*(x[0]**2)/2))))**2 

    Y=scipy.array((Ref)) 
    popt, pcov=curve_fit(func,x,Y) 

EDIT ここでは、完全なエラーメッセージ

Traceback (most recent call last): File "DCM_03.py", line 46, in <module> popt, pcov=curve_fit(func,x,Y) File "//anaconda/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 651, in curve_fit res = leastsq(func, p0, args=args, full_output=1, **kwargs) File "//anaconda/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 377, in leastsq shape, dtype = _check_func('leastsq', 'func', func, x0, args, n) File "//anaconda/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 26, in _check_func res = atleast_1d(thefunc(*((x0[:numinputs],) + args))) File "//anaconda/lib/python2.7/site-packages/scipy/optimize/minpack.py", line 453, in _general_function return function(xdata, *params) - ydata File "DCM_03.py", line 40, in func return (0.062/(2*x))**4*(x*d*(math.exp((-sig_int**2)*(x**2)/2)/(1-cmath.exp(complex(0,1)*x*d)*math.exp((-sig_cp**2)*(x**2)/2))))**2 TypeError: only length-1 arrays can be converted to Python scalars

ある
+0

コードサンプルは、フィールド 'Exp_Fresnal.csv'なしでは実行されません。この文書または外部ファイルに依存しないコードを提供できますか? – KeithWM

+0

私は質問にドキュメントファイルを添付することはできないと考えています。それは、それぞれが155行のデータの3列だけです。また、テストコードには実行するためのドキュメントが必要ありません。テストコードは動作しますが、実際のコードは動作しないため、実際のコードを含めました。データをインポートする方法と関係があるかどうかはわかりません。 – Charco

+0

完全なエラーを表示します。もっと多くの情報が含まれているはずです。 '' 'Y = func(X、3.1,2.2,2.1)' ''という行は疑わしく見えます。 – sascha

答えて

0

私は問題を理解しました。何らかの理由による問題は、フィッティング関数funcmath.expcmath.expを使用したことです。これらの機能の代わりにnp.exp()を使用しました。私は完全な理由は確かではありません。

関連する問題