ますはらの日記(?)

無線通信の勉強をしてる学生のぼやき(?)

Pythonで数値解析〜matplotlibを使ってみた〜

どうも。
今日は昨日、情弱なりに頑張ってnumpyやscipy、matplotlib、ipythonなどをせっかく入れたのでこれらを少し体感すべく簡単なプログラムを書いて動かしてみました。


今回以下のものを参考にしました。

2015 年度プログラミング言語演習 Python — 2015.ProgramingLanguage 0.4 ドキュメント


hiho-developer.hatenablog.com


myenigma.hatenablog.com

今回はsin波を16等分にサンプリングしてその結果をもとに曲線を描くというものを普通にpython(ここではpython2.7.10)で実行するパターンとipython(ここではipython3)を用いてやるパターンの2通りでやってみました( ´ ▽ ` )


まずはpythonで実行する場合を紹介します。

$python
>>>import numpy as np
>>>import scipy as sp
>>>import mayplotlib.pyplot as plt
>>>N = 16
>>>t = np.arange(N) #順番にシーケンスを生成(0〜15)
>>>x = np.sin(2 * np.pi / N * t)
>>>plt.plot(t, x) #グラフをプロット
>>>plt.show() #グラフを表示

すると、次のようにsin波の波形が表示されます。
f:id:mathharachan:20160301142651p:plain

しかし、この方法だとインポートしたりする作業がすごく面倒くさいですよね?ここでipythonを用いた場合はどうすれば同様のことができるか確認しましょう。

$ipython3 --pylab
>>>N = 16
>>>t = arange(N)
>>>x = sin(2 * pi / N * t)
>>>plot(t, x) #グラフをプロット&表示

ipythonではpythonだと8行書いて行っていたことが4行書いただけで実行することができました。すっきりしているかどうかで言えばipythonの方だと僕は個人的に思います( ^ω^ )
ただ、きちんとnumpyやscipyなどを使ってるという実感が出るのはpythonで上記のように書いて実行する方だと思いますが(笑)

しかーし!実はpythonで実行しようとしてもipythonのようにインポートを3つも行わなくても書く方法がありました。それが次の通りです。

$python
>>>from pylab import *
>>>N = 16
>>>t = arange(N)
>>>x = sin(2 * pi / N * t)
>>>plot(t, x)
>>>show()

インポートするための文を減らしたり簡潔に書けたりするので今後、本格的な数値解析をする場合は有効かもしれないですね( ^ω^ )
自分はまだ勉強して間もない(環境を整えるのも含め2日しか経ってない…)のでこれ以上の言及はしません(笑)


余談ですが、昨日のこの記事↓の中でも言いましたが、gfortranの導入を中断していました。
mathharachan.hatenablog.com
で、コンパイルなどで必要な場面があると思いきや、当分なさそうなのでgfortranの導入は必要になった時に入れるスタンスでいこうと思います(笑)
もし入れる時になったら、導入する際に奮闘(するはず)した事なども紹介できればと考えてます。


次回はもっとnumpyやscipyなどを利用した簡単めなプログラムの実行の体験を発信したいと思います。
それでは、また( ´ ▽ ` )ノ