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]