仕事上、早々にを使えるようにしないといけないため、
を基に学んでいく。
3. NumPyの基礎:配列とベクトル演算
は""の意味ででの数値計算におけるもっとも重要な基本パッケージの1つである。
3.6 行列計算
では**がアダマール積(対応する要素ごと)を意味するため、で内積を計算する。
関数 | 説明 |
---|---|
正方行列の対角成分を返す。 | |
2つの行列の内積を計算する。 | |
対角成分の総和(トレース)を計算する。 | |
行列式を計算する。 | |
正方行列に対して固有値および固有ベクトルを計算する。 | |
正方行列に対して逆行列を計算する。 | |
-型疑似逆行列を求める。 | |
分解を行なう。 | |
特異値分解を計算する。 | |
正方行列に対して線形方程式をについて解く。 | |
に対して最小二乗法による近似を求める。 |
################ ### 行列計算 ### ################ import numpy as np from numpy.linalg import inv, qr x = np.array([[1.,2.,3.],[4.,5.,6.]]) y = np.array([[6.,23.],[-1,7,],[8,9]]) print(x) print(y) # これらは等価 dot1 = x.dot(y) dot2 = np.dot(x,y) dot3 = x @ y print(dot1) print(dot2) print(dot3) # 標準的な計算 X = np.random.randn(5,5) mat = X.T.dot(X) # 転置行列と元の行列との内積 print(mat) inv_mat = inv(mat) # 逆行列 print(inv_mat) print(mat.dot(inv(mat))) # 行列×逆行列 q, r = qr(mat) # QR分解 print(r)
3.7 擬似乱数生成
は組み込みのを補完する形でモジュールを提供している。
from numpy import random samples = numpy.random.normal(size = (4, 4)) print(samples) # from random import normalvariate N = 1000000 %timeit samples = [normalvariate(0, 1) for _ in range(N)] %timeit np.random.normal(size = N)
擬似乱数のシードはで指定する。ただしモジュールで提供される乱数データ生成関数は、いずれもグローバル乱数シードを参照するため、グローバル参照を避けるには、を用いる。
関数 | 説明 |
---|---|
乱数生成器のシード。 | |
引数が配列の場合、その成分をランダムに並べ替えた新しい配列を返す。整数の場合、その引数でを呼び出し、結果をランダムに並べ替えた配列を返す。 | |
その配列事態の成分をランダムに並べ替える。 | |
連続一様乱数。 | |
与えられた整数範囲内での整数乱数。 | |
標準正規乱数。 | |
二項乱数。 | |
正規乱数。 | |
ベータ乱数。 | |
カイ二乗乱数。 | |
ガンマ乱数。 | |
区間の一様乱数。 |
######################## ### ランダムウォーク ### ######################## import random import numpy as np import matplotlib.pyplot as plt # position = 0 walk = [position] steps = 10000 for i in range(steps): step = 1 if random.randint(0,1) else -1 position += step walk.append(position) plt.plot(walk) # nsteps = 10000 draws = np.random.randint(0, 2, size = nsteps) steps = np.where(draws > 0, 1, -1) walk = steps.cumsum() walk.min() walk.max() plt.plot(walk)