Pythonプログラミング

数値計算ライブラリ NumPy による短縮化

Python言語を勉強し始めた途端に,一目惚れした.大学在職中に,反応速度の測定データを処理するために,学生に課していたた十進BASIC言語による「最小二乗法プログラム」を Python 言語で作ってみた.結論から言って,実に単純明快であり,大学のアルゴリズム教育でPython言語が採用されている理由が理解できたと言っても過言ではない.

データはinput関数で与えてもよいが,リストを使用してみた.x = [1,2,3,4,5] と y = [2.1,3,4,5,7]である.データ数は len で自動取得させ,合計は sum 関数でリストを指定すれば計算してくれる.sumx,sumy = sum(x), sum(y) と書けばよい.カンマの前後の変数(sumx,sumy)がイコールを挟んでそれぞれsum(x), sum(y) と対応するので,2行が1行で書くことができる.

プロットは plt.plot() を用いた.回帰直線はリスト(z)に x の値に対応する y 値を算出して x, z のリストを指定する.plt.plot() の第3引数として,プロット方式を指定することができる.plt.plot(x, y, 'go') はグリーン●でプロットし,plt.plot(x,z,'c-') はシアン (Cyan) で線を引く.そのほかPythonの特徴を理解するために,いろいろな手法を試してみた.

計算結果

描画結果



Pythonでグラフを描画するときなどに使われる標準的なライブラリmatplotlibを利用

プログラム最後尾の5行の命令文の実行結果

出力書式,描画に関する設定はすべてdefault値,細かい設定は行っていない.

組み込み関数やNumpy モジュールによるプログラムの大幅短縮

組み込み関数を使えば,要素の総和は sum(x) 1行で求めることができる.上述のプログラムで試用した.

標準偏差,相関係数の計算だけなら,プログラミング言語 Python において数値計算を効率的に行うための拡張モジュールである numpy を利用すると,それぞれ1行で結果を得ることができる

描画を含めて15行程度で完成

np.var, np.std はそれぞれ分散,標準偏差を算出する.np.corrcoef は相関係数,polufit は回帰直線の係数算出,polyld は係数をもとに関数を生成する.四則演算の実行文は存在しない.以下はプログラム,実行結果のスクリーンショットである.

今回のようなプログラムでは,計算処理のための四則演算の手順をプログラミングする必要はない.分散や共分散,標準偏差,回帰直線等の算出は決まりきった計算手順のため,データを与えれば答えを返してくれる数値計算ライブラリを利用することができる.Python言語にはそのような関連ライブラリやその拡張機能が豊富に準備されている.後半で紹介したように,ライブラリの使用法を理解すれば最小二乗法のプログラムはモジュール数と出力のための十数行程度で書くことができる.