はじめての Python + NumPy
NumPy とは何か,ウェブで検索するなどして調べなさい.
次のプログラムを実行して,何が起こっているか考えなさい.わかったことを高橋に説明しなさい.
import numpy as np A = np.array( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] ) print A print A.shape, A.dtype print B = np.array( [ [ 1, 2, np.pi ], [ 4, 5, 6 ] ] ) print B print B.shape, B.dtype print A[0,1] = np.exp(1) B[0,1] = np.exp(1) print A print B print C = A + B print C, C.shape, C.dtype print vec = np.arange( 1, 21 ) print vec, vec.shape, vec.dtype print mat = np.reshape( vec, ( 4, 5 ) ) print mat, mat.shape print print mat.T, mat.T.shape print mat[1, 1] *= 111 print mat print vec print X = mat[:2,2:4] print X print Y = X - 2 print Y Z = X * Y print Z Z = np.dot( X, Y ) print Z
np.ones, np.zeros について調べなさい.また,ipython で
In [1]: help(np.ones)
としてヘルプを出し(終了は less と同じでアルファベットのq),それを読んで,「整数の」1がならんだ2行3列の行列を作る方法を考えなさい.
NumPy と自分の頭を対決させてみよう.
Vision/2015/report1の問2をやりなさい.1.は手計算で,2.は NumPy で. 固有値固有ベクトルの計算は,np.linalg.eig を使えばよい. 使い方などは調べてみよう.
行列の積の計算でC言語と対決させてみよう.
こちらから入手しましょう https://gist.github.com/takatakamanbou/2713ba9a783d95d248f7
コンパイルの仕方
$ cc matrix.c -o matrix
または
$ cc -O3 matrix.c -o matrix
後者の最初のオプションはアルファベット大文字のオー.これは最適化オプションというもので,つけるとよりCPUを効率よく使う機械語プログラムを生成するようになります.
実行の仕方
$ time ./matrix 1000
行列の大きさを適当にかえて実行し,結果をテキストファイルに記録しておこう. 後日グラフを描いてみるのに使います.
こちらから入手しましょう https://gist.github.com/takatakamanbou/14391b6e42632215c7da
実行の仕方
$ time python matrix.py 1000
または ipython 上で
In [1]: %time %run matrix.py 1000
C言語の場合と同様に,いろいろ実験して結果をテキストファイルに残しておこう.