#はじめに
NumPyとは、数値計算を効率的に行うための拡張モジュールである。NumPyの内部はC言語 (およびFortran)によって実装されているため非常に高速に動作する。
※純粋にPythonのみを使って数値計算を行うと、ほとんどの場合C言語やJavaなどの静的型付き言語で書いたコードに比べて大幅に計算時間がかかる。
NumPy - Wikipedia
#導入など
・インポート
下のようにインポートすることでnumpyのライブラリを使うことが出来るようになる。
import numpy as np
#線形代数系機能
・ベクトル
ベクトルと行列は異なるものとされている。ベクトルには列、行どちらの方向かの区別がない。
x = np.array([1,2,3])
・行列
A = np.array([[1,2],[3,4],[5,6]])
・ベクトル(行列型)
行ベクトル、列ベクトルのどちらか明示的に指定できることが利点。
x1 = np.array([[1,2,3]])
x2 = np.array([[1],[2],[3]])
・行列の積
A = np.array([[1,2],[3,4],[5,6],[7,8]])
B = np.array([[1,2,3],[4,5,6]])
C = np.dot(B,C)#D=BC
・行列の各成分に対して四則演算
乗算のことはアダマール積という。
行列をA=(aij),B=(bij),C=(cij)とすると、加減乗除の計算はそれぞれ以下の計算に対応する。
(cij)=(aij+bij)
(cij)=(aij-bij)
(cij)=(aij*bij)
(cij)=(aij/bij)
A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
#加算
C = np.add(A,B) # C=A+B でも可
#減算
C = np.subtract(A,B) # C=A-B でも可
#乗算(通常の行列の積の意味で使わないように注意)
C = np.multiply(A,B) # C=A*B でも可
#除算
C = np.divide(A,B) # C=A/B でも可
・剰余
md = np.mod(13,3) # md = 10 % 3 でも可
# 1が出力(12/3 = 4あまり1)
・行列の転置
(aij)が転置後は(aji)となっている。
A = np.array([[1,2],[3,4],[5,6]])
t_A = A.transpose()
・ベクトルの内積
内積はドット積とも言われる。numpyではnp.dotを使う
v1 = np.array([1,2])
v2 = np.array([3,4])
ip = np.dot(v1,v2)
・ベクトル(行列型)の内積
v1,v2が縦ベクトルならこれらの内積をとる時、内積は(v1の転置)v2という行列の積で表せる。
v1 = np.array([[1],[2]])
v2 = np.array([[3],[4]])
ip= np.dot(v1.transpose(),v2)
・クロス積(2ベクトルに直交するベクトルを生成する:外積)
v1 = np.array([1,2,3])
v2 = np.array([1,3,5])
v3 = np.cross(v1,v2)
・テンソル積
要素をすべての組み合わせで掛け合わせたもの(戻り値は行列)
v1 = np.array([1,2,3])
v2 = np.array([1,3,5]) # 行ベクトル(行列)でも可
v3 = np.outer(v1,v2)
・ブロック行列の作成
行列をnp.arrayと同じような記述でくっつけることが出来ます。
列ベクトルを三つ並べて[v1,v2,v3]みたいにやりたいと思ってこれを見つけたときは心が躍りました。
A = np.array([[0.71,0.71],[-0.71,0.71]])
o = np.array([[0],[0]])
t_o= o.transpose()
i = 1
#[ A,o]
#[t_o,i]のような行列を作りたい
M = np.block([[A,o],[t_o,i]])
・行列式
A = np.array([[1,2],[3,4]])
d = np.linalg.det(A)
・逆行列
A = np.array([[1,2],[3,4]])
inv_A = np.linalg.inv(A)
・行列の累乗
A = np.array([[1,2],[3,4]])
A5 = np.linalg.matrix_power(A,5)
・固有値、固有ベクトル
A = np.array([[1,2],[3,4]])
(eig_val,eig_vec) = numpy.linalg.eig(A)
#定数
・円周率
PI = np.pi
・ネイピア数(自然対数の底)
E = np.e
#初等関数
・累乗
x = 2; l = 2
p = np.power(x,l) # x**lでも可
・平方根
x = 2
s = np.sqrt(x) # x**(1/2)でも可
・正弦関数sin()
x = np.pi
s = np.sin(x) # s = 0
・余弦関数cos()
x = np.pi
c = np.cos(x) # c = 1
・正接関数tan()
x = np.pi
t = np.tan(x) # t = 0
・指数関数exp()
x = 1
e = np.exp(x) # e:ネイピア数
・対数関数log()
x = np.e
l = np.log(x) # l = 1
・逆正弦関数arcsin(),逆余弦関数arccos(),逆正接関数arctan()
x = np.pi
as = np.arcsin(x) # 逆正弦関数
as = np.arccos(x) # 逆余弦関数
as = np.arctan(x) # 逆正接関数