NumPyの使い方(ユニバーサル関数)
NumPyのユニバーサル関数の使い方のメモです。
NumPy
NumPyは数学関数ライブラリです。
インストール方法は下記を参照。
pppurple.hatenablog.com
IPythonで使ってみます。
In [1]: import numpy as np
ユニバーサル関数(ufunc)
ユニバーサル関数(ufunc)はndarrayの各要素に対して演算した結果を戻します。
数学演算
abs
各要素の絶対値を返す。
In [10]: arr2 Out[10]: array([ 0, -1, -2, -3, -4, -5, -6, -7, -8, -9]) In [11]: np.abs(arr2) Out[11]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
sqrt
各要素の平方根を返す。
In [3]: arr Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [12]: np.sqrt(arr) Out[12]: array([ 0. , 1. , 1.41421356, 1.73205081, 2. , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ])
square
各要素の二乗を返す。
In [3]: arr Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [13]: np.square(arr) Out[13]: array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])
exp
各要素について自然対数eの累乗を返す。
In [3]: arr Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [14]: np.exp(arr) Out[14]: array([ 1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01, 5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03, 2.98095799e+03, 8.10308393e+03])
log
各要素の底eの自然対数を返す。
In [17]: arr3 Out[17]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) In [18]: np.log(arr3) Out[18]: array([ 0. , 0.69314718, 1.09861229, 1.38629436, 1.60943791, 1.79175947, 1.94591015, 2.07944154, 2.19722458, 2.30258509])
log10
各要素の底10の自然対数を返す。
In [17]: arr3 Out[17]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) In [19]: np.log10(arr3) Out[19]: array([ 0. , 0.30103 , 0.47712125, 0.60205999, 0.69897 , 0.77815125, 0.84509804, 0.90308999, 0.95424251, 1. ])
log2
各要素の底2の自然対数を返す。
In [17]: arr3 Out[17]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) In [20]: np.log2(arr3) Out[20]: array([ 0. , 1. , 1.5849625 , 2. , 2.32192809, 2.5849625 , 2.80735492, 3. , 3.169925 , 3.32192809])
sign
各要素について、正の場合1、負の場合-1、ゼロの場合は0を返す。
In [22]: arr4 Out[22]: array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]) In [23]: np.sign(arr4) Out[23]: array([-1, -1, -1, -1, -1, 0, 1, 1, 1, 1])
ceil
各要素について小数点以下を切り上げた整数を返す。
In [24]: ran = np.random.randn(10) In [25]: ran Out[25]: array([ 0.13795811, -0.06258411, 0.93709684, 0.58862496, -0.66407519, -0.05821423, -0.24729257, -0.32682603, -1.76702714, 1.4629411 ]) In [26]: np.ceil(ran) Out[26]: array([ 1., -0., 1., 1., -0., -0., -0., -0., -1., 2.])
floor
各要素について小数点以下で最大の整数を返す。
In [25]: ran Out[25]: array([ 0.13795811, -0.06258411, 0.93709684, 0.58862496, -0.66407519, -0.05821423, -0.24729257, -0.32682603, -1.76702714, 1.4629411 ]) In [27]: np.floor(ran) Out[27]: array([ 0., -1., 0., 0., -1., -1., -1., -1., -2., 1.])
rint
各要素について丸めた整数を返す。
In [25]: ran Out[25]: array([ 0.13795811, -0.06258411, 0.93709684, 0.58862496, -0.66407519, -0.05821423, -0.24729257, -0.32682603, -1.76702714, 1.4629411 ]) In [28]: np.rint(ran) Out[28]: array([ 0., -0., 1., 1., -1., -0., -0., -0., -2., 1.])
modf
要素ごとに整数部と小数部に分けた配列を戻す。
In [29]: ran2 = np.random.randn(10) * 5 In [30]: ran2 Out[30]: array([ 4.34473743, 2.32356206, -8.6143203 , -3.34730069, 4.95043047, 7.62167946, 5.40291925, 3.51175149, -10.65912297, -1.21207529]) In [31]: np.modf(ran2) Out[31]: (array([ 0.34473743, 0.32356206, -0.6143203 , -0.34730069, 0.95043047, 0.62167946, 0.40291925, 0.51175149, -0.65912297, -0.21207529]), array([ 4., 2., -8., -3., 4., 7., 5., 3., -10., -1.]))
isnan
各要素がNaNかどうかをbool値で返す。
In [36]: ran3 Out[36]: array([ 4.34473743, 2.32356206, nan, nan, 4.95043047, 7.62167946, 5.40291925, 3.51175149, -10.65912297, -1.21207529]) In [37]: np.isnan(ran3) Out[37]: array([False, False, True, True, False, False, False, False, False, False], dtype=bool)
isfinite
各要素についてNaNでもinfでもない場合true、そうでない場合falseを返す。
In [40]: ran3 Out[40]: array([ 4.34473743, 2.32356206, nan, inf, 4.95043047, 7.62167946, 5.40291925, 3.51175149, -10.65912297, -1.21207529]) In [41]: np.isfinite(ran3) Out[41]: array([ True, True, False, False, True, True, True, True, True, True], dtype=bool)
isinf
各要素についてinfかどうかをbool値で返す。
In [40]: ran3 Out[40]: array([ 4.34473743, 2.32356206, nan, inf, 4.95043047, 7.62167946, 5.40291925, 3.51175149, -10.65912297, -1.21207529]) In [42]: np.isinf(ran3) Out[42]: array([False, False, False, True, False, False, False, False, False, False], dtype=bool)
logical_not
各要素についてfalse値かどうかを判定する。
In [69]: np.logical_not([0, 1, True, False]) Out[69]: array([ True, False, False, True], dtype=bool)
add
各要素の和を返す。
In [71]: a Out[71]: array([0, 1, 2, 3, 4]) In [75]: b Out[75]: array([ 6, 7, 8, 9, 10]) In [76]: np.add(a, b) Out[76]: array([ 6, 8, 10, 12, 14])
subtract
各要素の差を返す。
In [71]: a Out[71]: array([0, 1, 2, 3, 4]) In [75]: b Out[75]: array([ 6, 7, 8, 9, 10]) In [78]: np.subtract(b, a) Out[78]: array([6, 6, 6, 6, 6])
multiply
各要素の積を返す。
In [71]: a Out[71]: array([0, 1, 2, 3, 4]) In [75]: b Out[75]: array([ 6, 7, 8, 9, 10]) In [79]: np.multiply(a, b) Out[79]: array([ 0, 7, 16, 27, 40])
divide
各要素の商を返す。
In [75]: b Out[75]: array([ 6, 7, 8, 9, 10]) In [92]: c Out[92]: array([10, 15, 20, 25, 30]) In [94]: np.divide(c, b) Out[94]: array([ 1.66666667, 2.14285714, 2.5 , 2.77777778, 3. ])
floor_divide
各要素の商の小数点を切り捨てた整数を返す。
In [75]: b Out[75]: array([ 6, 7, 8, 9, 10]) In [92]: c Out[92]: array([10, 15, 20, 25, 30]) In [95]: np.floor_divide(c, b) Out[95]: array([1, 2, 2, 2, 3])
power
1番目の配列の各要素に対して、2番目の各要素の累乗を返す。
In [71]: a Out[71]: array([0, 1, 2, 3, 4]) In [75]: b Out[75]: array([ 6, 7, 8, 9, 10]) In [96]: np.power(a, b) Out[96]: array([ 0, 1, 256, 19683, 1048576])
mod
1番目の配列の各要素から、2番目の配列の各要素の剰余を返す。
In [22]: a Out[22]: array([1, 2, 3, 4, 5]) In [23]: b Out[23]: array([ 6, 7, 8, 9, 10]) In [25]: np.mod(b, a) Out[25]: array([0, 1, 2, 1, 0])
copysign
1番目の配列の各要素の符号を、2番目の配列の各要素の符号に変換する。
In [31]: x Out[31]: array([ 1.83850616, -0.00928144, -0.82975527, 0.87667943, -1.0620178 ]) In [32]: y Out[32]: array([ 2.04224167, -0.6104846 , 0.49862891, -0.4277909 , -0.42408569]) In [33]: np.copysign(x, y) Out[33]: array([ 1.83850616, -0.00928144, 0.82975527, -0.87667943, -1.0620178 ])
三角関数
cos
各要素の余弦を返す。
In [43]: arr Out[43]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [51]: np.cos(arr) Out[51]: array([ 1. , 0.54030231, -0.41614684, -0.9899925 , -0.65364362, 0.28366219, 0.96017029, 0.75390225, -0.14550003, -0.91113026])
sin
各要素の正弦を返す。
In [52]: np.sin(arr) Out[52]: array([ 0. , 0.84147098, 0.90929743, 0.14112001, -0.7568025 , -0.95892427, -0.2794155 , 0.6569866 , 0.98935825, 0.41211849])
tan
各要素の正接を返す。
In [53]: np.tan(arr) Out[53]: array([ 0. , 1.55740772, -2.18503986, -0.14254654, 1.15782128, -3.38051501, -0.29100619, 0.87144798, -6.79971146, -0.45231566])
In [58]: arr5 Out[58]: array([ 0. , 0.5, 1. ]) In [59]: np.arccos(arr5) Out[59]: array([ 1.57079633, 1.04719755, 0. ])
arcsin
各要素の逆正弦を返す。
In [60]: np.arcsin(arr5) Out[60]: array([ 0. , 0.52359878, 1.57079633])
In [61]: np.arctan(arr5) Out[61]: array([ 0. , 0.46364761, 0.78539816])
比較演算
greater
各要素を比較する。a > b の結果を返す。
In [35]: a Out[35]: array([-2, -1, 0, 1, 2]) In [37]: b Out[37]: array([-3, -2, 0, 2, 4]) In [38]: np.greater(a, b) Out[38]: array([ True, True, False, False, False], dtype=bool)
greater_equal
各要素を比較する。a >= b の結果を返す。
In [35]: a Out[35]: array([-2, -1, 0, 1, 2]) In [37]: b Out[37]: array([-3, -2, 0, 2, 4]) In [39]: np.greater_equal(a, b) Out[39]: array([ True, True, True, False, False], dtype=bool)
less
各要素を比較する。a < b の結果を返す。
In [35]: a Out[35]: array([-2, -1, 0, 1, 2]) In [37]: b Out[37]: array([-3, -2, 0, 2, 4]) In [40]: np.less(a, b) Out[40]: array([False, False, False, True, True], dtype=bool)
less_equal
各要素を比較する。a <= b の結果を返す。
In [35]: a Out[35]: array([-2, -1, 0, 1, 2]) In [37]: b Out[37]: array([-3, -2, 0, 2, 4]) In [41]: np.less_equal(a, b) Out[41]: array([False, False, True, True, True], dtype=bool)
equal
各要素を比較する。a = b の結果を返す。
In [35]: a Out[35]: array([-2, -1, 0, 1, 2]) In [37]: b Out[37]: array([-3, -2, 0, 2, 4]) In [42]: np.equal(a, b) Out[42]: array([False, False, True, False, False], dtype=bool)
not_equal
各要素を比較する。a != b の結果を返す。
In [35]: a Out[35]: array([-2, -1, 0, 1, 2]) In [37]: b Out[37]: array([-3, -2, 0, 2, 4]) In [43]: np.not_equal(a, b) Out[43]: array([ True, True, False, True, True], dtype=bool)
maximum
各要素同士を比較して大きい方を返す。NaNが含まれている場合、NaNを返す。
In [7]: x Out[7]: array([-0.78780433, 0.00584326, nan, 1.00060331, -0.57256836]) In [8]: y Out[8]: array([ 2.01085585, 0.33302472, -0.62328293, 1.3707416 , 0.16804423]) In [9]: np.maximum(x, y) Out[9]: array([ 2.01085585, 0.33302472, nan, 1.3707416 , 0.16804423])
fmax
各要素同士を比較して大きい方を返す。NaNが含まれている場合、NaNではない方を返す。
In [7]: x Out[7]: array([-0.78780433, 0.00584326, nan, 1.00060331, -0.57256836]) In [8]: y Out[8]: array([ 2.01085585, 0.33302472, -0.62328293, 1.3707416 , 0.16804423]) In [10]: np.fmax(x, y) Out[10]: array([ 2.01085585, 0.33302472, -0.62328293, 1.3707416 , 0.16804423])
minimum
各要素同士を比較して小さい方を返す。NaNが含まれている場合、NaNを返す。
In [7]: x Out[7]: array([-0.78780433, 0.00584326, nan, 1.00060331, -0.57256836]) In [8]: y Out[8]: array([ 2.01085585, 0.33302472, -0.62328293, 1.3707416 , 0.16804423]) In [11]: np.minimum(x, y) Out[11]: array([-0.78780433, 0.00584326, nan, 1.00060331, -0.57256836])
fmin
各要素同士を比較して小さい方を返す。NaNが含まれている場合、NaNではない方を返す。
In [7]: x Out[7]: array([-0.78780433, 0.00584326, nan, 1.00060331, -0.57256836]) In [8]: y Out[8]: array([ 2.01085585, 0.33302472, -0.62328293, 1.3707416 , 0.16804423]) In [12]: np.fmin(x ,y) Out[12]: array([-0.78780433, 0.00584326, -0.62328293, 1.00060331, -0.57256836])
logical_and
各要素の論理積を返す。
In [45]: a Out[45]: array([ True, False, True, False], dtype=bool) In [47]: b Out[47]: array([ True, True, False, False], dtype=bool) In [48]: np.logical_and(a, b) Out[48]: array([ True, False, False, False], dtype=bool)
logical_or
各要素の論理和を返す。
In [45]: a Out[45]: array([ True, False, True, False], dtype=bool) In [47]: b Out[47]: array([ True, True, False, False], dtype=bool) In [49]: np.logical_or(a, b) Out[49]: array([ True, True, True, False], dtype=bool)
logical_not
各要素の論理否定を返す。
In [45]: a Out[45]: array([ True, False, True, False], dtype=bool) In [47]: b Out[47]: array([ True, True, False, False], dtype=bool) In [50]: np.logical_not(a, b) Out[50]: array([False, True, False, True], dtype=bool)
logical_xor
各要素の排他的論理和を返す。
In [45]: a Out[45]: array([ True, False, True, False], dtype=bool) In [47]: b Out[47]: array([ True, True, False, False], dtype=bool) In [51]: np.logical_xor(a, b) Out[51]: array([ True, True, True, True], dtype=bool)
終わり。