NumPyの使い方(統計関数、集合関数)
NumPyの統計関数と集合関数の使い方のメモです。
NumPy
NumPyは数学関数ライブラリです。
インストール方法は下記を参照。
pppurple.hatenablog.com
IPythonで使ってみます。
In [1]: import numpy as np
統計関数
統計関数はndarrayのメソッドとして実行、またはnumpyの関数としても実行できる。
mean
算術平均を算出。
In [2]: arr = np.random.randn(5, 4) In [3]: arr Out[3]: array([[-0.95839481, 0.05124362, 0.65485084, 0.54505791], [-1.58525473, -0.32399282, 0.76428108, 0.28883652], [-0.03463767, -1.53789016, -0.20222787, -0.8765573 ], [ 1.07199473, 0.94943464, -0.61879003, -0.20948927], [-1.10662553, -0.70518836, -0.11055268, -0.40102818]]) In [4]: arr.mean() Out[4]: -0.21724650239347504 In [5]: np.mean(arr) Out[5]: -0.21724650239347504
mean()にaxisを指定した場合は、その軸の平均値を算出。
In [3]: arr Out[3]: array([[-0.95839481, 0.05124362, 0.65485084, 0.54505791], [-1.58525473, -0.32399282, 0.76428108, 0.28883652], [-0.03463767, -1.53789016, -0.20222787, -0.8765573 ], [ 1.07199473, 0.94943464, -0.61879003, -0.20948927], [-1.10662553, -0.70518836, -0.11055268, -0.40102818]]) In [6]: arr.mean(axis=1) Out[6]: array([ 0.07318939, -0.21403249, -0.66282825, 0.29828752, -0.58084869])
sum
配列の合計を算出。
In [3]: arr Out[3]: array([[-0.95839481, 0.05124362, 0.65485084, 0.54505791], [-1.58525473, -0.32399282, 0.76428108, 0.28883652], [-0.03463767, -1.53789016, -0.20222787, -0.8765573 ], [ 1.07199473, 0.94943464, -0.61879003, -0.20948927], [-1.10662553, -0.70518836, -0.11055268, -0.40102818]]) In [7]: arr.sum() Out[7]: -4.344930047869501 In [8]: np.sum(arr) Out[8]: -4.344930047869501
sum()にaxisを指定した場合は、その軸の合計を算出。
下記の例はaxisを省略した記法。
In [9]: arr.sum(0) Out[9]: array([-2.612918 , -1.56639308, 0.48756135, -0.65318031])
std
標準偏差を算出。
In [9]: data = np.ceil(np.random.rand(10) * 50) In [10]: data Out[10]: array([ 13., 43., 41., 21., 11., 35., 42., 48., 15., 4.]) In [11]: np.std(data) Out[11]: 15.303921066184312 In [17]: data.std() Out[17]: 15.303921066184312
var
分散を算出。
In [10]: data Out[10]: array([ 13., 43., 41., 21., 11., 35., 42., 48., 15., 4.]) In [12]: np.var(data) Out[12]: 234.20999999999998 In [18]: data.var() Out[18]: 234.20999999999998
min
最小値を算出。
In [10]: data Out[10]: array([ 13., 43., 41., 21., 11., 35., 42., 48., 15., 4.]) In [13]: np.min(data) Out[13]: 4.0 In [19]: data.min() Out[19]: 4.0
max
最大値を算出。
In [10]: data Out[10]: array([ 13., 43., 41., 21., 11., 35., 42., 48., 15., 4.]) In [14]: np.max(data) Out[14]: 48.0 In [20]: data.max() Out[20]: 48.0
argmin
最小値の要素のndarrayのインデックスを返す。
In [10]: data Out[10]: array([ 13., 43., 41., 21., 11., 35., 42., 48., 15., 4.]) In [15]: np.argmin(data) Out[15]: 9 In [21]: data.argmin() Out[21]: 9
argmax
最大値の要素のndarrayのインデックスを返す。
In [10]: data Out[10]: array([ 13., 43., 41., 21., 11., 35., 42., 48., 15., 4.]) In [16]: np.argmax(data) Out[16]: 7 In [22]: data.argmax() Out[22]: 7
cumsum
累積和を算出。
1番目の要素 + 2番目の要素 + 三番目の要素 + … と和が累積されていく。
In [10]: data Out[10]: array([ 13., 43., 41., 21., 11., 35., 42., 48., 15., 4.]) In [23]: np.cumsum(data) Out[23]: array([ 13., 56., 97., 118., 129., 164., 206., 254., 269., 273.]) In [24]: data.cumsum() Out[24]: array([ 13., 56., 97., 118., 129., 164., 206., 254., 269., 273.])
axisで対象となる軸を指定。
下記の例はaxisを省略した記法。
In [28]: arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) In [29]: arr Out[29]: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) In [30]: arr.cumsum(0) Out[30]: array([[ 0, 1, 2], [ 3, 5, 7], [ 9, 12, 15]]) In [33]: arr.cumsum(1) Out[33]: array([[ 0, 1, 3], [ 3, 7, 12], [ 6, 13, 21]])
cumprod
累積積を算出。
1番目の要素 * 2番目の要素 * 三番目の要素 * … と和が累積されていく。
In [10]: data Out[10]: array([ 13., 43., 41., 21., 11., 35., 42., 48., 15., 4.]) In [25]: np.cumprod(data) Out[25]: array([ 1.30000000e+01, 5.59000000e+02, 2.29190000e+04, 4.81299000e+05, 5.29428900e+06, 1.85300115e+08, 7.78260483e+09, 3.73565032e+11, 5.60347548e+12, 2.24139019e+13]) In [26]: data.cumprod() Out[26]: array([ 1.30000000e+01, 5.59000000e+02, 2.29190000e+04, 4.81299000e+05, 5.29428900e+06, 1.85300115e+08, 7.78260483e+09, 3.73565032e+11, 5.60347548e+12, 2.24139019e+13])
axisで対象となる軸を指定。
下記の例はaxisを省略した記法。
In [31]: arr.cumprod(1) Out[31]: array([[ 0, 0, 0], [ 3, 12, 60], [ 6, 42, 336]]) In [32]: arr.cumprod(0) Out[32]: array([[ 0, 1, 2], [ 0, 4, 10], [ 0, 28, 80]])
集合関数
unique
配列の重複を除外する。
In [49]: chars = np.array(['A', 'B', 'C', 'D', 'A', 'D', 'G']) In [50]: chars Out[50]: array(['A', 'B', 'C', 'D', 'A', 'D', 'G'], dtype='<U1') In [51]: np.unique(chars) Out[51]: array(['A', 'B', 'C', 'D', 'G'], dtype='<U1') In [52]: ints = np.array([1, 2, 3, 2, 4, 2, 4]) In [53]: ints Out[53]: array([1, 2, 3, 2, 4, 2, 4]) In [54]: np.unique(ints) Out[54]: array([1, 2, 3, 4])
in1d
1番目の引数の配列の各要素が、2番目の引数の配列に含まれるかどうかの真偽値を返す。
In [4]: c1 = np.array(['A', 'B', 'C', 'D', 'A', 'D', 'G']) In [5]: c2 = np.array(['B', 'C', 'D', 'F', 'G', 'I']) In [7]: np.in1d(c1, c2) Out[7]: array([False, True, True, True, False, True, True], dtype=bool)
intersect1d
1番目と2番目の引数の配列の共通要素を返す。結果はソートされて返る。
In [4]: c1 = np.array(['A', 'B', 'C', 'D', 'A', 'D', 'G']) In [5]: c2 = np.array(['B', 'C', 'D', 'F', 'G', 'I']) In [6]: np.intersect1d(c1, c2) Out[6]: array(['B', 'C', 'D', 'G'], dtype='<U1')
setdiff1d
1番目の引数の配列の各要素から、2番目の引数の配列に含まれる要素を除外した要素を返す。結果はソートされて返る。
In [4]: c1 = np.array(['A', 'B', 'C', 'D', 'A', 'D', 'G']) In [5]: c2 = np.array(['B', 'C', 'D', 'F', 'G', 'I']) In [8]: np.setdiff1d(c1, c2) Out[8]: array(['A'], dtype='<U1')
setxor1d
1番目と2番目の引数の配列の要素から、共通要素を除いた要素を返す。結果はソートされて返る。
In [4]: c1 = np.array(['A', 'B', 'C', 'D', 'A', 'D', 'G']) In [5]: c2 = np.array(['B', 'C', 'D', 'F', 'G', 'I']) In [9]: np.setxor1d(c1, c2) Out[9]: array(['A', 'F', 'I'], dtype='<U1')
union1d
1番目と2番目の引数の配列の要素をすべて合わせた要素を返す。結果はソートされて返る。
In [4]: c1 = np.array(['A', 'B', 'C', 'D', 'A', 'D', 'G']) In [5]: c2 = np.array(['B', 'C', 'D', 'F', 'G', 'I']) In [10]: np.union1d(c1, c2) Out[10]: array(['A', 'B', 'C', 'D', 'F', 'G', 'I'], dtype='<U1')
終わり。