HOWTO
TSVファイルを読み込む方法
乱数の配列を取得するには 2014/05/18
例
import numpy as np
# 0.0 から 1.0 までの一様な乱数100個をnumpyの配列で生成
print(np.random.uniform(0.0, 1.0, 100))
# 平均0.0、標準偏差1.0の正規分布に従う乱数100個をnumpyの配列で生成
print(np.random.normal(0.0, 1.0, 100))
# λ=10 のポワソン分布に従う乱数100個をnumpyの整数の配列で生成
print(np.random.poisson(10, 100))
Random sampling (numpy.random) | NumPy v1.8 Manual
http://docs.scipy.org/doc/numpy/reference/routines.random.html
行列から行単位または列単位で一部を取り出すには 2014/05/20
スライス表記はNumPyの多次元配列にも使える。
列単位で取り出す例
\[ \mathbf{X} = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ \end{pmatrix} \]
import numpy as np
from pprint import pprint
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
pprint(x)
# =>
# array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
pprint(x[:,0])
# =>
# array([1, 4, 7])
pprint(x[:,1])
# =>
# array([2, 5, 8])
pprint(x[:,1:2])
# =>
# array([[2],
# [5],
# [8]])
pprint(x[:,1:3])
# =>
# array([[2, 3],
# [5, 6],
# [8, 9]])
行単位で取り出す例
import numpy as np
from pprint import pprint
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
pprint(x[0,:])
# =>
# array([1, 2, 3])
pprint(x[1:3,:])
# =>
# array([[4, 5, 6],
# [7, 8, 9]])
行列の転置を求めるには 2014/05/18
2次元配列に対してT
メソッドを呼ぶだけでよい。
\[ \mathbf{X} = \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ \end{pmatrix} \]
\[ \mathbf{X}^T = \begin{pmatrix} 1 & 3 \\ 2 & 4 \\ \end{pmatrix} \]
import numpy as np
from pprint import pprint
X = np.array([[1, 2], [3, 4]])
pprint(X.T)
# =>
# array([[1, 3],
# [2, 4]])
# 以下のようにNumPyでない普通の配列に対して T を呼びだそうとすると
# AttributeError: 'list' object has no attribute 'T'
# というエラーが発生する
# X = [[1, 2], [3, 4]]
行列の固有値・固有ベクトルを求めるには 2014/05/14
scipy.linalg.eig
関数を使う。
例
任意の行列:
\[ \mathbf{X} = \begin{pmatrix} 2 & 3 \\ 1 & 4 \\ \end{pmatrix} \]
固有ベクトルを並べたもの:
\[ \mathbf{S} = \begin{pmatrix} -0.95 & -0.71 \\ 0.32 & -0.71 \\ \end{pmatrix} \]
固有値の対角行列:
\[ \mathbf{\Lambda} = \begin{pmatrix} 1.00 & 0 \\ 0 & 5.00 \\ \end{pmatrix} \]
積:
\[ \mathbf{X} \mathbf{S} = \mathbf{S} \mathbf{\Lambda} = \begin{pmatrix} -0.95 & -3.54 \\ 0.32 & -3.54 \\ \end{pmatrix} \]
import numpy as np
from scipy import linalg as la
x = np.array([[2, 3], [1, 4]])
lam, s = la.eig(x)
print(lam)
# [ 1.+0.j 5.+0.j]
print(s)
# [[-0.9486833 -0.70710678]
# [ 0.31622777 -0.70710678]]
lam = np.diag(lam)
print(lam)
# [[ 1.+0.j 0.+0.j]
# [ 0.+0.j 5.+0.j]]
print(x.dot(s))
# [[-0.9486833 -3.53553391]
# [ 0.31622777 -3.53553391]]
print(s.dot(lam))
# [[-0.94868330+0.j -3.53553391+0.j]
# [ 0.31622777+0.j -3.53553391+0.j]]