LoginSignup
1
1

More than 3 years have passed since last update.

[python]numpyの使い方まとめ

Posted at

はじめに

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) # 逆正接関数
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1