Python初心者です。
23年ぶりにプログラムの真似事をしました。
多変数の近似式を求めるコードを書きました。
結果は望んだとおりにできたのですが、
ダラダラとした印象があります。
コードの書き方に改善点などあればご指摘ください。
#csvの操作用にインポート import csv #csvの数値計算用のライブラリをインポート import numpy as np #データ数のカウント def csv_in(): with open('C:/Users/.spyder-py3/191224~/testdataXYZ.csv') as f: val0 = float(0) gyo = float(0) ret = float(0) reader = csv.reader(f) val0 = [row for row in reader] f.close() gyo = np.shape(val0)[0] ret = np.shape(val0)[1] return gyo #データの入力 def csv_in2(): with open('C:/Users/.spyder-py3/191224~/testdataXYZ.csv') as f: val0 = float(0) reader = csv.reader(f) val0 = [row for row in reader] f.close() return val0 #データの切り分け def val_cut(j,val2): n = [val2[i][0] for i in range(j)] x = [val2[i][1] for i in range(j)] y = [val2[i][2] for i in range(j)] z = [val2[i][3] for i in range(j)] #文字の削除 del n[0],x[0],y[0],z[0] val3 = x,y,z, return val3 # 定数項、偏回帰係数の算出 def stat(o, e): e = np.vstack([np.ones(e.shape[1]), e]) # 定数項, 説明変数 return np.linalg.lstsq(e.T, o)[0] # 偏回帰係数 #結果の表示 def out_put(val6): a0, a1, a2, a3, a4, a5, a6, a7, a8 ,a9 = val6 print('算出式') print('z=(6*x^3)+(5*x^2*y)+(0*x*y^2)+(4*x*y)+3*x+2*y+0*x^2+0*y^2+y^3+100') print('答え合わせ') print("a1 = 6 = ", a1) print("a2 = 5 = ", a2) print("a3 = 0 = ", a3) print("a4 = 4 = ", a4) print("a5 = 3 = ", a5) print("a6 = 2 = ", a6) print("a7 = 0 = ", a7) print("a8 = 0 = ", a8) print("a9 = 1 = ", a9) print("b= 100 = ", a0) return def main(): #数字の初期化(1) i = int(0) j = int(0) k = int(0) #データ数のカウント csv_in() #データ数の受け渡し k = csv_in() #データ数を使った数字の初期化(2) val1 = [0]*csv_in() val2 = [0]*csv_in() val3 = [0]*csv_in() val4 = [0]*csv_in() val5 = [0]*csv_in() val6 = [0]*csv_in() #データの入力 val1 = csv_in2() #データの切り分け val4 = val_cut(k,val1) x,y,z = val4 #文字列を削除した分のデータ数補正 k = int(k)-1 #数字の数値化 x = [float(x[i]) for i in range(k)] y = [float(y[i]) for i in range(k)] z = [float(z[i]) for i in range(k)] # リストの初期化 x3=[0]*(k) x2y=[0]*(k) xy2=[0]*(k) y3=[0]*(k) x2=[0]*(k) y2=[0]*(k) xy=[0]*(k) # 変数の計算 for i in range(k): x3[i]=x[i]**3 x2y[i]=x[i]**2*y[i] xy2[i]=x[i]*y[i]**2 y3[i]=y[i]**3 x2[i]=x[i]**2 y2[i]=y[i]**2 xy[i]=x[i]*y[i] # 定数項、偏回帰係数の算出 obj = np.array(z) # 目的変数 exp = np.array([x3, x2y, xy2, xy, x, y, x2, y2, y3]) # 説明変数 a0, a1, a2, a3, a4, a5, a6, a7, a8 ,a9 = stat(obj, exp) #a0,a1, a2, a3, a4, a5, a6, a7, a8 , a9 #b, x**3, x**2*y, x*y**2, x*y, x, y, x**2, y**2 y**3 val5 = a0, a1, a2, a3, a4, a5, a6, a7, a8 ,a9 out_put(val5) return main()
算出式 z=(6*x^3)+(5*x^2*y)+(0*x*y^2)+(4*x*y)+3*x+2*y+0*x^2+0*y^2+y^3+100 答え合わせ a1 = 6 = 5.999999999999969 a2 = 5 = 5.000000000000004 a3 = 0 = 1.7763568394002505e-15 a4 = 4 = 4.000000000000141 a5 = 3 = 2.999999999996261 a6 = 2 = 2.000000000001903 a7 = 0 = 5.88640247656258e-13 a8 = 0 = -3.9968028886505635e-13 a9 = 1 = 1.000000000000011 b= 100 = 100.00000000000243
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。