Helve’s Python memo

Pythonを使った機械学習やデータ分析の備忘録

<NumPy> 数学の関数

mathライブラリの数学の関数は、一般にスカラー値にしか適応できない。
一方、NumPyの数学の関数は、スカラー値に加え、リストやnumpy.arrayオブジェクトにも適応できる。

三角関数

角度の単位はラジアン

記法 説明
sin np.sin(a)
cos np.cos(a)
tan np.tan(a)
arcsin np.arcsin(a)
arccos np.arccos(a)
arctan np.arctan(a) 戻り値の範囲は[-pi/2, pi/2]
arctan2 np.arctan2(a, b) a/bのarctanを返す。戻り値の範囲は[-pi, pi]

>>> import numpy as np
>>> a = np.array([0, np.pi/6, np.pi/3, np.pi/2]) # np.piは円周率
>>> b = np.sin(a)
>>> b
array([ 0.       ,  0.5      ,  0.8660254,  1.       ])
>>> np.arcsin(b)
array([ 0.        ,  0.52359878,  1.04719755,  1.57079633])
>>> np.deg2rad([0, 90, 180])         # degからradへ変換
array([ 0.        ,  1.57079633,  3.14159265])
>>> np.rad2deg([0, np.pi/2, np.pi])  # radからdegへ変換
array([   0.,   90.,  180.])

双曲線関数

メソッド 記法
sinh np.sinh(a)
cosh np.cosh(a)
tanh np.tanh(a)
arcsinh np.arcsinh(a)
arccosh np.arccosh(a)
arctanh np.arctanh(a)

端数処理

記法 説明
四捨五入 np.around(a, decimals=0) 10^(-decimals)の1つ下の位を四捨五入
四捨五入 np.round_(a, decimals=0) aroundと同じ
0方向への丸め np.fix(a)
負方向への丸め(切捨て) np.floor(a)
正方向への丸め(切上げ) np.ceil(a)
0方向への丸め np.trunc(a)

>>> np.around(123.456, decimals=0)   # 0.1の位を四捨五入
123.0
>>> np.around(123.456, decimals=1)   # 0.01の位を四捨五入
123.5
>>> np.around(123.456, decimals=-2)  # 10の位を四捨五入
100.0
>>> np.fix([0.7, 3.2, -0.7, -3.2])   # 0方向への丸め
array([ 0.,  3., -0., -3.])
>>> np.floor([0.7, 3.2, -0.7, -3.2]) # 負方向への丸め
array([ 0.,  3., -1., -4.])
>>> np.ceil([0.7, 3.2, -0.7, -3.2])  # 正方向への丸め
array([ 1.,  4., -0., -3.])
>>> np.trunc([0.7, 3.2, -0.7, -3.2]) # 0方向への丸め
array([ 0.,  3., -0., -3.])

和・積・差分

1つの配列に含まれる要素の和・積・差分。

>>> a = np.array([[1, 2], [3, 4]])
>>> np.sum(a)          # 全要素の和
10
>>> np.sum(a, axis=0)  # 列方向の和
array([4, 6])
>>> np.sum(a, axis=1)  # 行方向の和
array([3, 7])
>>> np.prod(a)         # 全要素の積
24
>>> np.prod(a, axis=0) # 列方向の積
array([3, 8])
>>> np.prod(a, axis=1) # 行方向の積
array([ 2, 12])
>>> b = np.array([[1, 2, 4, 8], [3, 5, 9, 7]])
>>> np.diff(b)         # 最大の軸方向(axis=1)の差分
array([[ 1,  2,  4],
       [ 2,  4, -2]])
>>> np.diff(b, axis=0) # 列方向の差分
array([[ 2,  3,  5, -1]])
>>> np.diff(b, n=2)    # n: 差分をとる回数( =np.diff(np.diff(b)) )
array([[ 1,  2],
       [ 2, -6]])

指数関数・対数関数

>>> np.exp([0, 1])         # 指数関数
array([ 1.        ,  2.71828183])
>>> np.log([1, np.e])      # 自然対数
array([ 0.,  1.])
>>> np.log10([1, 10, 100]) # 常用対数
array([ 0.,  1.,  2.])

その他

>>> np.sqrt([1, 4, 9])          # 平方根
array([ 1.,  2.,  3.])
>>> np.cbrt([1, 8, 27])         # 立方根(三乗根)
array([ 1.,  2.,  3.])
>>> np.square([1, 2, 3])        # 二乗
array([1, 4, 9], dtype=int32)
>>> np.absolute([-3, -1, 1, 3]) # 絶対値
array([3, 1, 1, 3])
>>> np.sign([-3, -1, 1, 3])     # 符号
array([-1, -1,  1,  1])
>>> np.maximum([-3, -1, 1, 3], [4, 2, -2, -4]) # 各要素の最大値
array([4, 2, 1, 3])
>>> np.minimum([-3, -1, 1, 3], [4, 2, -2, -4]) # 各要素の最小値
array([-3, -1, -2, -4])

1つの配列の最大値・最小値を求める場合は、np.max, np.min関数。

参考:
Mathematical functions — NumPy v1.13 Manual