Snow leopardにNumpy,Scipy,Pylabをインストール
重い腰を持ち上げて,すこしばかりPython導入に向けて進んでみた.
現在は研究ではOctaveをメインとしているので,それから移行できれば良いなと思っています.
とりあえずNumpy,Scipy,Pylabをインストールする.
Pythonの所在は,ターミナルで確認したところ,
hoge$ ls -l `which python` -rwxr-xr-x 2 root wheel 86000 6 25 2010 /usr/bin/python
とでた.
多分,最初からSnow leopardに入っているものだと思われる.
"Superpack Installer" というSnow leopard用のインストールスクリプトを利用する.
Scipy Superpack for Mac OSXの中段あたりの,「Download Scipy Superpack Installer for OSX 10.6 (Updated 10 July 2011)」をダウンロードして適当なところに保存.
まったく手順通りに従う.
ターミナルで,
hoge$ sh superpack_10.6_2011.07.10.sh
を実行すると,
Would you like to install gFortran (required if not already installed)? (y/n)
と聞かれるので,"yes"と答えてみる.
gFortranのバイナリのダウンロードが始まる.
結構時間がかかる.
gFortranをインストール後,
Password:
とパスワードを尋ねられるので,rootのパスワードを入力.
あとは勝手にやってくれる.
Finished processing dependencies for DateUtils Done hoge$
と出ればインストール終了.
Pythonを起動して動作を確認する.
まず,ターミナルで "python" と入力して起動.
hoge$ python Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>
以下のようにしたが,どうやらテストできていない.
>>> import numpy >>> numpy.test('1', '10') nose.selector: INFO: **************.py is executable; skipped . . . nose.selector: INFO: **************.py is executable; skipped ---------------------------------------------------------------------- Ran 0 tests in 0.056s OK <nose.result.TextTestResult run=0 errors=0 failures=0>
scipy.test('1', '10')の結果も同じだった.
ググッた結果,
>>> numpy.test('1','10',extra_argv=['--exe']) . . . ---------------------------------------------------------------------- Ran 3614 tests in 21.084s FAILED (KNOWNFAIL=4, SKIP=2, failures=1) <nose.result.TextTestResult run=3614 errors=0 failures=1>
とすれば,どうやらテストができているみたいだった.
ただし,
>>> scipy.test('1','10',extra_argv=['--exe'])
とすると途中でpythonが落ちる.よく分からない.
matplotlibを使ってみる.
次のスクリプトをpython.pyとして保存する.
# pylab_test.py # -*- coding: utf-8 -*- import pylab import numpy pylab.ion() x = numpy.arange(0, 1, 0.001) xn = numpy.array(x)*numpy.pi*2*2 y = numpy.sin(xn) z = numpy.cos(xn) print "Plotting SIN and COS functions" pylab.plot(x, y, label="$\sin(x)$") pylab.plot(x, z, label="$\cos(x)$") pylab.xlabel("Time $x$ [sec]") pylab.ylabel("Amplitude $y$") pylab.legend() pylab.savefig("test.eps") # output in EPS pylab.savefig("test.png") # output in PNG raw_input("Press ENTER KEY to exit")
実行してみる.
hoge$ python test_pylab.py Plotting SIN and COS functions Press ENTER KEY to exit (←Enterを押して終了) hoge$
savefigで,カレントディレクトリに図が出力される.
ちなみにこれ.
LaTeXの数式が書けるのがよい.
最後にOctave*1と行列計算の速さを比べてみる.
比較に用いるマシンはMacBook Pro (Mid 2010, 2.66 GHz Intel Core 2 Duo, 4 GB DDR3) です.
Ocataveのスクリプト(benchm.m)は,
% benchm.m num = 2000; A = randn(num); B = randn(num); % 行列の積 tic; M = A*B; t = toc; fprintf('Matrix product: %dx%d: %.3f\n', num, num, t); % 逆行列 tic; M = inv(M); t = toc; fprintf('Inverse matrix: %dx%d: %.3f\n', num, num, t);
こうなる.
Pythonのスクリプト(benchm.py)は,
# benchm.py from numpy import * from scipy import * from pylab import * import time num = 2000 A = randn(num,num) B = randn(num,num) A = matrix(A) B = matrix(B) # 行列の積 start = time.clock() M = A*B end = time.clock() print "Matrix product: %dx%d: %.3f" % (num, num, end - start) # 逆行列 start = time.clock() M = linalg.inv(M) end = time.clock() print "Inverse matrix: %dx%d: %.3f" % (num, num, end - start)
となる.
実行結果は,Octaveが,
Matrix product: 2000x2000: 1.161 Inverse matrix: 2000x2000: 1.925
Pythonが,
Matrix product: 2000x2000: 2.660 Inverse matrix: 2000x2000: 4.075
となり,Octaveの勝ちという残念な結果に終わった.
iPythonも触ってみたけど,ほとんどMATLABじゃねぇかと思った.
*1:[http://octave.sourceforge.net/:title=Octave-Forge]で配布されているバイナリ