HOWTO

TSVファイルを読み込む方法

-> TSVファイルを読み込む方法

乱数の配列を取得するには

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

行列から行単位または列単位で一部を取り出すには

スライス表記は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]])

行列の転置を求めるには

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]]

行列の固有値・固有ベクトルを求めるには

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]]
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。