高速数値計算ライブラリ「Numpy」覚書き
Pythonで一番有名で普及しているライブラリと言っても過言ではない「Numpy」の覚書きです。かなり多機能な数値計算ライブラリで、内部はC言語で記述されているため超高速に動作します。
ベクトル
ベクトルの長さ&正規化
import numpy a = numpy.array([[2,2]]) #ベクトルの長さ length = numpy.linalg.norm(a) #length=>2.8284271247461903 #ベクトルの正規化 a / numpy.linalg.norm(a) #=>array([[ 0.70710678, 0.70710678]])
内積&外積
import numpy v1 = numpy.array((1,0,0)) v2 = numpy.array((0,1,0)) #内積 numpy.dot(v1,v2) #=> 0 #外積 numpy.cross(v1,v2) #=>[0 0 1]
一般的には2次元の外積の存在は賛否が分かれる所ですが、numpyでは2次元ベクトルの外積が用意されています。
import numpy numpy.cross([0,1],[ 1,0]) #-1 numpy.cross([0,1],[-1,0]) # 1 numpy.cross([1,0],[ 0,1]) # 0
内積を90度回転させた感じですね、左右の正と負の領域判定に使えそうです。
行列
単位行列の定義
import numpy I = numpy.matrix(numpy.identity(3)) #[[ 1. 0. 0.] # [ 0. 1. 0.] # [ 0. 0. 1.]]
転置
import numpy a = numpy.matrix([[1,2],[3,4]]) # [[1, 2], # [3, 4]] a.T # [[1, 3], # [2, 4]]
逆行列&行列式
import numpy a = numpy.matrix([[3,1], [1,2]]) #逆行列 a.I #[[ 0.4, -0.2], # [-0.2, 0.6]] #行列式 numpy.linalg.det(a) # 5.0
回転行列
import python from numpy import sin,cos r = numpy.pi/2. #2次元回転 numpy.matrix( ( ( cos(r), sin(r)), (-sin(r), cos(r)) ) ) #3次元z軸回転 numpy.matrix( ( ( cos(r), sin(r), 0.), (-sin(r), cos(r), 0.), ( 0., 0., 1.) ) ) #3次元x軸回転 numpy.matrix( ( ( 1., 0., 0.), ( 0., cos(r), sin(r)), ( 0.,-sin(r), cos(r)) ) ) #3次元y軸回転 numpy.matrix( ( ( cos(r), 0.,-sin(r)), ( 0., 1., 0.), ( sin(r), 0., cos(r)) ) )
行列とベクトルの積
import numpy #行列 mat = numpy.matrix( ( (2.0, 0.0, 10), (0.0, 3.0, 10), ) ) #ベクトル vec = numpy.array( (2.0,2.0, 1.0) ) #行列とベクトルの積 numpy.dot(mat,vec) #[ 14. 13.]
固有値・固有ベクトル&対角化
A*v = λ*v(λ=Aの固有値,v=Aの固有ベクトルとする)
行列の対角化(diagonal)とは、正方行列Aに対して対角化された行列をPとすると、
P^-1 * A * P = 対角要素が固有値の行列
(P^-1はPの逆行列を表す)
となる行列である。
なお、numpy.diagonal()は対角化する関数ではなく、単に行列の対角要素をベクトルとして返す関数なので注意。
import numpy A = numpy.array([[5,-2],[-4,7]]) (l,v) = numpy.linalg.eig( A ) #l=>[ 3., 9.] #v=>[[-0.70710678, 0.4472136 ], # [-0.70710678, -0.89442719]]
その他
平均値&標準偏差
import numpy pop = [79,81,77,78,83,80,82,78,80,82] #平均 numpy.mean(pop) #=>80.0 #標準偏差 numpy.std(pop) #=>1.8973665961010275
相関係数&相関係数行列
import numpy a = [1,2,3,4,5] b = [1,1,3,5,5] c = [5,4,3,1,1] d = [-1,3,-4,5,-5] #aとbの相関係数 numpy.corrcoef(a,b)[0][1] #=> 0.948683298051 #aとcの相関係数 numpy.corrcoef(a,c)[0][1] #=> -0.972271824132 #aとdの相関係数 numpy.corrcoef(a,d)[0][1] #=> -0.218797487247 #a,b,c,dの相関係数行列 numpy.corrcoef([a,b,c,d]) #[[ 1. 0.9486833 -0.97227182 -0.21879749] # [ 0.9486833 1. -0.97827974 -0.1153164 ] # [-0.97227182 -0.97827974 1. 0.01933915] # [-0.21879749 -0.1153164 0.01933915 1. ]]