ベストフィット線形パラメータAとB(y = Ax + b)は、これらのパラメータに対するカイ2乗関数の最小値に対応します。グローバルカイ二乗最小値(2パラメータ線形カイ2乗が放物線であるため保証)をブルートフォースグリッドで検索し、3つのネストされたループ(以下)で実現しましたが、ループを避けたい(ベクトル化Numpyの配列放送プロパティを使用して)。PythonでのLooplessカイ二乗グリッド検索numpy
カイ二乗(加重最小二乗)は次のように定義される。
以下Chi-square(k,j) = sum (y[i]-(A[k]*x[i]+B[j]))/yerr[i])^2
10,000 Aの組み合わせ及びBパラメータ値上カイ二乗値で100×100のグリッドを埋めるのPython numpyのコードであります(それぞれ100個の値)。 x、y、yerrという3つのデータ配列があります。
Python Numpyでの2パラメータ線形カイ二乗グリッド検索の無用バージョンへの助けに感謝します。
注意グリッド検索を行い、scipy.optimize.minimizeを使用しない - ありがとう!
キース
# create parameter grid
a = np.linspace(80,120,100)
b = np.linspace(10,40,100)
A,B = np.meshgrid(a,b)
# calculate chi-square over parameter grid
chi2=np.zeros((100,100))
for k in range(100):
for j in range(100):
for i in range (len(y)):
chi2a = ((y[i]-a[k]*x[i]-b[j])/yerr[i])**2;
chi2[k,j]+=chi2a;
最後の行のインデントが間違って見える -
はここ
np.einsum
との相互だと多分速いです。また、代わりに 'chi2 [k、j] + = chi2a'ではないでしょうか? – Divakar両方のコメントに「はい」(編集済み)です。これをキャッチしていただきありがとうございます! – Carey
'chi2a'の計算ごとに更新を合計する必要があるので、そこにさらに2つのタブインデントが必要であると考えてください。 – Divakar