Python でベクトル・行列演算
numpy と scipy.linalg を使うため、まず import する。
>>> import numpy
>>> import scipy.linalg
□ ベクトルの要素に対する演算
ベクトルの定義
>>> v1 = numpy.array([1, 2, 3])
>>> v1
>>> v2 = numpy.array([[1], [2], [3]])
>>> v2
v1 はベクトルだが、v2 は 3x1 行列となっていることに注意。
数学関数
>>> v1**2
>>> 2**v2
>>> numpy.sin(v1)
>>> numpy.cos(v2)
□ ベクトルに対する演算
総和
>>> numpy.sum(v1)
平均
>>> numpy.mean(v2)
標準偏差
>>> numpy.std(v1)
□ 行列の要素に対する演算
行列の定義
>>> M = numpy.array([[1, 2, 3],[4, 5, 6],[7, 9, 8]])
>>> M
数学関数
>>> numpy.sin(M)
>>> numpy.sqrt(M)
行列の各行・列に対する演算
>>> numpy.mean(M,axis=0)
>>> numpy.mean(M,axis=1)
>>> numpy.mean(M)
'axis=0' で列、'axis=1' で行に対する演算となる。指定しないと行列全
体で計算する。
□ 行列やベクトルに対する演算
ベクトルの要素同士の演算
>>> v1+v1
>>> v2*v2
>>> v1**v1
ベクトルの積(内積)
>>> v1.dot(v1)
>>> v1.dot(v2)
ベクトル同士の内積はスカラーになるが、ベクトルと行列の内積の結果は
行列となることに注意。
ベクトルの積(エルミート内積)
>>> numpy.outer(v1,v1)
行列の要素同士の演算
>>> M+M
>>> M*M
行列の積
>>> M.dot(M)
ベクトルと行列の積
>>> v1.dot(M)
>>> M.dot(v1)
>>> M.dot(v2)
ベクトルに対する行列の積と、行列同士の積は結果が異なる。
□ 行列に対する演算
逆行列
>>> numpy.linalg.inv(M)
>>> numpy.linalg.inv(M).dot(M)
行列式
>>> numpy.linalg.det(M)
転置
>>> M.T
>>> v1.T
>>> v2.T
ベクトル(v1)は転置によって変化せず、v2 は 1x3 行列に変わる。
複素共役転置
>>> numpy.conj(M.T)
行列関数
>>> scipy.linalg.expm(M)
>>> scipy.linalg.logm(M)
>>> scipy.linalg.sqrtm(M)
固有値と固有ベクトル
>>> D, V = numpy.linalg.eig(M)
V に固有ベクトルを列とする行列が返り,
D に固有値のベクトルが返る.
□ ベクトル・行列の生成
ベクトルの生成
>>> numpy.arange(1,11)
>>> numpy.arange(1,11,2)
>>> numpy.linspace(1, 10, 5)
行列の生成
>>> numpy.eye(3,3)
>>> numpy.diag([1, 2, 3])
>>> numpy.zeros((4,3))
>>> numpy.ones((3,4))
>>> numpy.random.rand(3,3)
>>> numpy.random.randn(3,3)
rand は一様分布乱数を randn は正規分布乱数を成分にする行列を生成.
Python で数値計算
naniwa@rbt.his.u-fukui.ac.jp