Pythonを自然科学の標準プログラミング言語にしたい
アカデミックでもみんなPython使おうよ!というお話。特に、プログラミングがあくまで研究手段というスタンスの人には向いていると思う。一方で、情報系でシステム評価やってますという人や、大規模計算やってますという人は、今まで通りCやFORTRANを使ったほうがいい。
Pythonを薦める理由
Pythonのアレな点
一番は、日本ではマイナー言語だということ。最近はかなり日本語の情報も増えてきたけれど、スクリプト言語の中でも、RubyやPerlに比べるとやっぱり国内ではマイナー。なので、研究室や周りに使っている人がいないと、Pythonを押し切って使うのはキツいかも。
NumPyとSciPy
フリーのMATLABクローンだと思えば良い。たとえばこんな機能がある:
行列式
>>> A = mat('[8, 3, 2, -5; 4, -1, 2, 3; 5, 6, 2, 3; 1, 6, 2, 7]') >>> linalg.det(A) 255.99999999999994
>>> linalg.inv(A) matrix([[-0.21875, 0.09375, 0.5625 , -0.4375 ], [ 0.03125, -0.15625, 0.0625 , 0.0625 ], [ 0.78125, 0.09375, -1.5625 , 1.1875 ], [-0.21875, 0.09375, 0.3125 , -0.1875 ]])
定積分
>>> scipy.integrate.quad(lambda x: exp(-x**2), 0, Inf) (0.8862269254527579, 7.101318390472462e-09)
matplotlibというパッケージを使えば、グラフ描画も出来る。参考:Screenshots — Matplotlib 1.3.1 documentation
Sympy
Mathematicaのような数式処理が欲しいなら、Sympyというパッケージがある。
文字式
>>> x = Symbol('x') >>> y = Symbol('y') >>> ((x+y)**2).expand() x**2 + 2*x*y + y**2
>>> limit(sin(x)/x, x, 0) 1
>>> x = Function('x') >>> t = Symbol('t') >>> dsolve(x(t).diff(t) - 2*x(t)*(1-x(t)), x(t), hint='best') x(t) == exp(2*t)/(C1 + exp(2*t))
Gröbner基底
>>> x = Symbol('x') >>> y = Symbol('y') >>> groebner([x*y - 2*y, 2*y**2 - x**2], order='grevlex') [x**3 - 2*x**2, -x**2 + 2*y**2, x*y - 2*y]