NumPyの使い方(5) ベクトル演算とユニバーサル関数
ベクトル演算とユニバーサル関数について。
ベクトル演算
ndarrayと数値(スカラー)の計算は全要素対象で、forループを使わない。
ndarrayどうしの演算は対応する位置の要素どうしで計算。
[注意]ndarray * ndarrayは内積や外積にはならない。
import numpy as np a1 = np.arange(6).reshape(2, 3) print(a1) # [[0 1 2] # [3 4 5] print(a1 + 1) # [[1 2 3] # [4 5 6] print(a1 - 1) # [[-1 0 1] # [ 2 3 4] print(a1 * 2) # [[ 0 2 4] # [ 6 8 10] print(a1 / 10) # [[ 0. 0.1 0.2] # [ 0.3 0.4 0.5] print(a1 ** 2) # [[ 0 1 4] # [ 9 16 25] print(a1 +a1) # [[ 0 2 4] # [ 6 8 10]] print(a1 * a1) # [[ 0 1 4] # [ 9 16 25]]
ユニバーサル関数(ufunc, universal function)
ベクトル演算と同様に、要素ごとに計算される。
引数となる配列が1つのとき「単項ufunc」、2つのとき「2項ufunc」
例:
a1 = np.arange(6) a2 = np.arange(0, 60, 10) # 単項ユニバーサル関数の例 print(np.square(a1)) # [ 0 1 4 9 16 25] # 2項ユニバーサル関数の例 print(np.add(a1, a2)) # [ 0 11 22 33 44 55]
単項ufunc
abs | 整数、小数、複素数の絶対値 |
fabs | 整数、小数の絶対値。高速 |
sqrt | 平方根。 array**0.5と同等 |
square | 2乗。 array**2と同等 |
exp | eを底としたべき乗 |
log | 自然対数。底がe |
log10 | 常用対数。底が10 |
log2 | 底が2の対数 |
log1p | 1を加えてからの自然対数 |
sign | 要素の符号を返す。正:+1, 負:-1, ゼロ:0 |
ceil | 切り上げ |
floor | 切り捨て |
rint | dtypeそのままで、四捨五入 |
modf | 整数部分と小数部分の2つの配列を返す |
isnan | NaNかどうかの真偽値 |
isfinite | True:Nanでもinfでもない。False:NaNかinf |
isinf | infかどうか。 |
sin | 三角関数 |
cos | |
tan | |
sinh | 双曲線関数 |
cosh | |
tanh | |
arcsin | 逆三角関数 |
arcsos | |
arctan | |
arcsinh | 逆双曲線関数 |
arccosh | |
arctanh | |
logical_not | 論理否定。-arrayと同等 |
2項unfnc
add | 和 |
subtract | 差 |
multiply | 積 |
divide | 商 |
floor_divide | 商を左方向へ丸める。// |
power | 累乗 |
maximum | 最大値。NaNがあるときはNaNを選ぶ |
minimum | 最小値。NaNがあるときはNaNを選ぶ |
fmax | 最大値。NaNがあるときはNaNではない方 |
fmin | 最小値。NaNがあるときはNaNではない方 |
mod | 剰余 |
copysign | 1つめの配列の絶対値を2つめの配列の符号に。 |
greater | > |
greater_equal | >= |
less | < |
less_equal | <= |
equal | == |
not_equal | != |
logical_and | & 論理和 |
logical_or | |論理積 |
logical_xor | ^ 排他 |
・np.vectorize()を使って自作の関数をufuncにできる。
def myfunc(x, y): return x + y vfunc = np.vectorize(myfunc) print(vfunc(np.arange(5), 10)) # [10 11 12 13 14]