前提・実現したいこと
大学で研究の過程でクリギングという地球統計学の分析手法のプログラムを作成しています。
pythonを始めて1週間の未熟者ですが、どうかお力をお貸しください。
3301deta.csvというファイルには21行3列のx,y,z値が入っています。
120行3列で計算結果を抽出したいのですが、loopを使っているせいか、csvファイルに計算結果を抽出すると最終行のみ表示されてしまいます。
どのようにプログラムを変更すれば計算結果すべてがcsvファイルに表示できるようになるでしょうか。よろしくお願いいたします。
該当のソースコード
python
1 2# 標元データのファイル名を指定する 3file_name = '3301deta.csv' 4#ボーリングの本数 5bn = 21 6 7param[3] = 2332 8param[4] = 1512 9 10# 元データを読み込み、配列に格納する 11source_arr = np.genfromtxt(file_name, delimiter=',', skip_header=1) 12 13#最尤推定値の計算 14#準備 15def vario(a): 16 b = squareform(pdist(a[:, 0:2], 'euclidean')) 17 return b 18l_vario = vario(source_arr) 19#モデル近似後のバリオグラムの行列 20a = np.exp(l_vario/param[3]*(-1)) 21h_vario = param[4]*(1-a) 22#行列に1と0を追加 23c = np.append(h_vario, [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]], axis=0) 24d = np.append(c, [[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[0]], axis=1) 25#逆行列を求める 26e = np.linalg.inv(d) 27#求める推定値の座標 28x = np.arange(-7130, -6680, 3.75) 29x1 = x[:, np.newaxis] 30y = np.arange(-262730, -261530, 10) 31y1 = y[:, np.newaxis] 32x1y1 = np.hstack([x1,y1]) 33 34for num in range (0,120) : 35 xy0 = x1y1[num, ] 36 xy1 = np.tile(xy0, (21,1)) 37 xydata1 = np.loadtxt("3301deta.csv", delimiter=",", skiprows=1,) 38 xydata=np.delete(xydata1, [2], axis=1) 39 xy = xy1-xydata 40 #距離 41 xys1 = np.delete(xy,[1],axis=1) 42 xys2 = np.delete(xy,[0],axis=1) 43 xys3 = np.power(xys1, 2) 44 xys4 = np.power(xys2, 2) 45 xys5 = xys3 + xys4 46 xys6 = np.sqrt(xys5) 47 #バリオグラム近似 48 xyv1 = np.exp(xys6/param[3]*(-1)) 49 xyv2 = param[4]*(1-xyv1) 50 xyv3 = np.append(xyv2, [[1]], axis=0) 51 #逆行列との積 52 f = np.dot(e,xyv3) 53 h = f[:bn,] 54 #推定値算出 55 i = np.delete(xydata1, [0,1], axis=1) 56 j = i * h 57 est = np.sum(j) 58 59 #推定誤差標準偏差 60 k = h * xyv2 61 sig2 = np.sum(k) 62 sig = np.sqrt(sig2) 63 sigp = est + sig 64 sigm = est - sig 65 res = np.array([est, sigp, sigm]) 66np.savetxt("extract.csv", res, delimiter=",")

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/13 03:30