Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

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]