エラーが出ます
curve_fit()を使って、定義した式中の最適化された a と T の値を求めようとしています。
以下のコードの curve_fit() を使用している行でエラーが出ます。
import numpy as np import scipy.optimize as optimize from numpy import exp as exp from numpy import pi as pi h = 6.62606876 * 10 ** -34 c = 299792458.0 k = 1.3806503 * 10 ** -23 parameter_initial = np.array([0,2000]) def func(x, a, T): return (10**-7)*a*2.0*pi*h*c**2/(((x*10**(-9))**5)*(exp((h*c)/((x*10**(-9))*k*T))-1.0)) data = np.loadtxt('test.txt') data_x = data[:, 0] data_y = data[:, 1] parameter_aT, parameter = optimize.curve_fit(func, data_x, data_y, p0 = parameter_initial) y = func(data_x, parameter_aT[0], parameter_aT[1])
test.txt
test.txtの中身(一部)は以下の通りです。n行2列でスペース区切りです。
4.395183066999999824e+02 3.215451790192022652e-02
4.449402655000000095e+02 3.108482251934293131e-02
4.457118290000000229e+02 3.092934433430016145e-02
4.526744095000000243e+02 2.946349906940348706e-02
4.542168293999999946e+02 2.922468844170659358e-02
4.549980049000000122e+02 2.905573990407350066e-02
4.557691323999999895e+02 2.893623722803133000e-02
4.588533180000000016e+02 2.824795956014531165e-02
4.627178395000000251e+02 2.763898558200103897e-02
4.642594219000000635e+02 5.844604162699411354e-02
4.650301661999999965e+02 5.828256719299678562e-02
4.673422128000000271e+02 2.689456581147890712e-02
4.681228412999999478e+02 2.675835103135611182e-02
4.696639899000000469e+02 2.653039457989943631e-02
...
エラー内容
ufunc 'multiply' did not contain a loop with signature matching types dtype('<U106') dtype('<U106') dtype('<U106')
調べて分かったこと
参考サイト
定義した式に渡す値のデータ型を、明確に指定すれば良さそう・・・
コード修正
import numpy as np import scipy.optimize as optimize from numpy import exp as exp from numpy import pi as pi h = 6.62606876 * 10 ** -34 c = 299792458.0 k = 1.3806503 * 10 ** -23 # ↓追加 parameter_initial = np.array([0,2000], dtype = 'float') def func(x, a, T): return (10**-7)*a*2.0*pi*h*c**2/(((x*10**(-9))**5)*(exp((h*c)/((x*10**(-9))*k*T))-1.0)) # ↓追加 data = np.loadtxt('test.txt', dtype = 'float') data_x = data[:, 0] data_y = data[:, 1] parameter_aT, parameter = optimize.curve_fit(func, data_x, data_y, p0 = parameter_initial) y = func(data_x, parameter_aT[0], parameter_aT[1])
エラー内容
同じエラー内容が出ます。
ufunc 'multiply' did not contain a loop with signature matching types dtype('<U106') dtype('<U106') dtype('<U106')
どのようにコードを修正したらいいか教えてほしいです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー