KobayashiRui
10/12/2017 - 5:09 PM

Numpy memo

numpyでよく使うor悩んだところをメモしていく ここでは import numpy as np と宣言している前提で話をすすめていく

ユークリッド距離

np.linalg.norm(a-b)

行列の長さ

len(行列) 結果 : 列の長さをだす

行列の連結

行を連結

np.r_[a,b]

列を連結

np.c_[a,b]

注意

1次元の場合、縦列だとみなす

array([0,1,2,3])
=>
array([0],[1],[2],[3])

格子列を作成する

同じ要素を選択すると各座標を表す=>二つの配列からすべての組み合わせを生み出せる

x = np.array([0,1,2])
y = np.array([3,4])
xx,yy = np.meshgrid(x,y)

xxとyyの各要素が対応している

乱数の生成方法

np.random

の中にある

標準正規分布(ガウシアン)

x = np.random.randn(n,d)
  • n : 作成する乱数の個数
  • d : 作成する乱数の次元

今回の場合n×dの行列が生成される

1次元正規乱数

np.random.normal(loc, scale, size)
  • loc : 期待値(平均)
  • scale : 生成したい正規分布の標準偏差を指定
  • size : 生成する乱数の個数を指定する

多次元正規乱数の生成

np.random.multivariate_normal(loc, scale, size, check_valid, tol)
  • loc : 生成したい正規分布の平均値ベクトルを指定
  • scale : 生成したい正規分布の分散共分散行列を指定
  • size : 生成する乱数の数を指定
  • check_valid : 分散共分散行列の半正定値チェックの有無(warn/raise/ignore)を指定[オプション]
  • tol : 半正定値チェックの許容誤差[オプション]

行列の扱い方(基本編)

行列の作成

npを利用して行列を作成する
多重リストと違い行列とした様々な操作が簡単にできる!!

np.array([1,2,3],[4,5,6])

これにより行列が作成される
今回の場合は

array([1,2,3],
      [4,5,6])

となっている

行列の列と行の数

x = np.array([1,2,3],[4,5,6])
x.shape

行列とベクトル

numpyでは1行のベクトル、1列のベクトルは特別な動きとなっている
引っかかるポイントまとめる

固有値と固有ベクトルを求める

la, v = np.linalg.eig(A)

laには固有値がvには固有ベクトルが入る Aには固有値と固有ベクトルを求めたい行列を代入する

配列要素の平均を求める

np.average()
np.mean(配列)

averageは重み付きの平均を求めることができる

  • 第1引数 : 平均をもとめたい配列
  • 第2引数 : 平均を求める軸の方向
  • 第3引数 : 重み
  • 第4引数 : 値の返し方

逆行列を求める

np.linalg.inv(A)

Aは逆行列を求めたい行列

行列同士の積を求める

np.dot(a,b)

a : 左からかける行列 b : 右からかける行列

各要素への操作

各要素の絶対値を返す

np.abs(A)

各要素の平方根を返す

np.sqrt(A)

各要素の二乗を返す

np.square(A)

各要素について自然対数eの累乗を返す

np.exp(A)

各要素の底eの自然対数を返す

np.log(A)

各要素の底10の自然対数を返す

np.log10(A)

各要素の底2の自然対数を返す

np.log2(A)