はじめに
ゲーム実況AI「宮咲ふわら」を作成するときに使ったNumPyの関数の備忘録です。
環境
本記事内のコードは全て次のようにインポートした状態で動作しています。
import numpy as np
ライブラリのバージョンは次のとおりです。
- Python3.6.2
- NumPy1.14.3
配列の初期化
full(shape, fill_value, dtype=None, order='C')
任意の値で初期化された配列を取得するための関数。
zeros/ones(shape, dtype=None, order='C')
0/1で初期化された配列を取得するための関数。
np.full([2, 3], 3)
# [[3 3 3]
# [3 3 3]]
np.zeros([2, 3])
# [[0. 0. 0.]
# [0. 0. 0.]]
arange(start=None, stop=None, step=None, dtype=None)
始点から終点まで公差stepの等差数列で初期化された配列を取得するための関数。
終点は含まれない。
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
始点から終点までをnum分割した等差数列で初期化された配列を取得するための関数。
endpoint : 終点を含むかどうか
retstep : 公差を表示するかどうか
np.arange(1, 6)
# [1 2 3 4 5]
np.arange(1, 6, 2)
# [1 3 5]
np.linspace(1, 5, 3))
# [1. 3. 5.]
np.linspace(1, 5, 3, endpoint=False)
# [1. 2.33333333 3.66666667]
np.linspace(1, 10, 5, retstep=True)
# (array([ 1. , 3.25, 5.5 , 7.75, 10. ]), 2.25)
最大/最小
amax/amin(a, axis=None, out=None, keepdims=np._NoValue)
配列の要素の最大値/最小値を取得するための関数。
argmax/argmin(a, axis=None, out=None)
配列の要素の最大値/最小値のインデックスを取得するための関数。
a = np.array([0, 1, 2, 1, 3, 0])
np.max(a)
# 3
np.argmax(a)
# 4
b = np.array([[0, 1],
[2, 1],
[3, 0]])
np.amax(b, axis=0)
# [4 5]
np.amax(b, axis=1)
# [1 3 5]
np.argmax(b, axis=0)
# [2 0]
np.argmax(b, axis=1)
# [1 0 0]
ソート
sort(a, axis=-1, kind='quicksort', order=None)
配列の要素を並び替えた配列を取得するための関数。
argsort(a, axis=-1, kind='quicksort', order=None)
配列の要素を並び替えた際のインデックスを取得するための関数。
a = np.array([2, 5, 0, 1, 3, 4])
np.argsort(a)
# [2 3 0 4 5 1]
np.sort(a)
# [0 1 2 3 4 5]
計算
mean(a, axis=None, dtype=None, out=None, keepdims=np._NoValue)
配列の要素の平均を取得するための関数。
sum(a, axis=None, dtype=None, out=None, keepdims=np._NoValue)
配列の要素の合計を取得するための関数。
a = np.array([[0, 1, 2],
[3, 4, 5]])
np.mean(a)
# 2.5
np.mean(a, axis=0)
# [1.5 2.5 3.5]
np.mean(a, axis=1)
# [1. 4.]
abs(x, *args, **kwargs)
xの絶対値を取得するための関数。
np.abs(-5)
# 5
np.abs([1, -1, 2, -2])
# [1 1 2 2]
exp(x, *args, **kwargs)
eのx乗を取得するための関数。
np.exp(1)
# 2.718281828459045
np.exp([1,2])
# [2.71828183 7.3890561]
sqrt(x, *args, **kwargs)
xの平方根を取得するための関数。
np.sqrt(2)
# 1.4142135623730951
np.sqrt([3, 4])
# [1.73205081 2. ]
sin/cos/tan(x, *args, **kwargs)
三角関数を取得する関数。
他にarcsin()等も存在する。
np.sin(0)
# 0.0
np.sin(np.pi)
# 1.2246467991473532e-16
np.sin([0, np.pi / 2])
# [0. 1.]
clip(a, a_min, a_max, out=None)
配列の要素を指定した範囲に収めた配列を取得するための関数。
要素ごとに最大値/最小値を指定することもできる。
a = np.array([0, 1, 2, 3, 4, 5])
np.clip(a, 1, 4)
# [1 1 2 3 4 4]
np.clip(a, [5, 0, 5, 0, 5, 5], 5)
# [5 1 5 3 5 5]
配列の変形
reshape(a, newshape, order='C')
配列の形状を変更した配列を取得するための関数。
a = np.array([[0, 1, 2],
[3, 4, 5]])
np.reshape(a, (3, 2))
# [[0 1]
# [2 3]
# [4 5]]
delete(arr, obj, axis=None)
配列から指定した要素を削除した配列を取得するための関数。
a = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9,10,11]])
np.delete(a, 1, axis=0)
# [[ 0 1 2 3]
# [ 8 9 10 11]]
np.delete(a, 1, axis=1)
# [[ 0 2 3]
# [ 4 6 7]
# [ 8 10 11]]
concatenate(a_tuple, axis=0, out=None)
配列同士を結合した配列を取得するための関数。
a = np.array([[0, 1, 2],
[3, 4, 5]])
b = np.array([[6, 7, 8],
[9,10,11]])
np.concatenate((a, b), axis=0)
# [[ 0 1 2]
# [ 3 4 5]
# [ 6 7 8]
# [ 9 10 11]]
np.concatenate((a, b), axis=1)
# [[ 0 1 2 6 7 8]
# [ 3 4 5 9 10 11]]
tile(A, reps)
配列をタイル状に並べた配列を取得するための関数。
a = [0, 1]
np.tile(a, 2)
# [0 1 0 1]
np.tile(a, (2, 3))
# [[0 1 0 1 0 1]
# [0 1 0 1 0 1]]
meshgrid(*xi, **kwargs)
配列同士を格子状に配置したときの軸ごとの配列を取得するための関数。
a = [1, 3, 5]
b = [2, 4]
x, y = np.meshgrid(a, b)
# x
# [[1 3 5]
# [1 3 5]]
# y
# [[2 2 2]
# [4 4 4]]
参考
DeepAge - あなたのデータサイエンス力を飛躍的に向上させるNumPy徹底入門
SciPy.org - Numpy and Scipy Documentation