NumPyの使い方(7) 統計関数、最大・最小
NumPyの統計関数の使い方
ndarray配列全体、あるいは特定の軸についての統計処理をする。
sumやmeanなどの集計処理は次元削減になる。
axis=0 縦方向にreduce
axis=1 横方向にredece
sum | 和。 長さ0の配列では0を返す。 |
mean | 平均。長さ0の配列ではNaNを返す。 |
var | 分散 |
std | 標準偏差 |
min | 最小値, aminも同じ |
max | 最大値, amaxも同じ |
nanmin | NaNを無視した最小値 |
nanmax | NaNを無視した最大値 |
minimun | 2つの配列を比較して小さい要素、NaNを優先 |
maximun | 2つの配列を比較して大きい要素、NaNを優先 |
fmin | 2つの配列を比較して小さい要素、NaNを無視 |
fmax | 2つの配列を比較して小さい要素、NaNを無視 |
argmin | 最小値のインデックス |
argmax | 最大値のインデックス |
cumsum | 累積和 |
cumprod | 累積積 |
maximumやfmaxでは予めNaNを処理したほうがよさそう。
import numpy as np a1 = np.array([[1, 2], [3, 4]]) a2 = np.array([[0, 5], [2, 6]]) a3 = np.array([[0, 5], [2, np.nan]]) print(a1.max(axis=0)) # [3 4] print(a1.max(axis=1)) # [2 4] print(a1.max()) # 4 print(a1.argmax()) # 3 : 1次元配列にし、3番要素が最大値 print(a3.max()) # nan print(np.nanmax(a3)) # 5.0 print(np.maximum(a1, a2)) # [[1 5] # [3 6]] print(np.maximum(a1, a3)) # [[1 5] # [3 nan]] RuntimeWarning: invalid value encountered in maximum print(np.fmax(a1, a3)) # [[ 1. 5.] # [ 3. 4.]] RuntimeWarning: invalid value encountered in fmax
mean(), sum()
a1 = np.arange(12).reshape(3, 4) print(a1) # [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11]] # mean print(a1.mean()) # 4.0 メソッド print(np.mean(a1)) # 4.0 関数 # axisを指定すると1次元低い配列を取得 print(np.mean(a1, 0)) # [ 4. 5. 6. 7.] print(np.mean(a1, axis=0)) # [ 4. 5. 6. 7.] print(np.mean(a1, 1)) # [ 1.5 5.5 9.5] print(np.mean(a1, axis=1)) # [ 1.5 5.5 9.5] #print(np.mean(a1, 2)) IndexError: tuple index out of range print(a1.sum()) # 66 print(np.sum(a1)) # 66 print(a1.sum(0)) # [12 15 18 21] print(a1.sum(1)) # [ 6 22 38]
累積和cumsum(), 累積積cumprod()
a2 = np.ones((3, 4), dtype=int) a2*= 2 print(a2) # [[2 2 2 2] # [2 2 2 2] # [2 2 2 2]] print(np.cumsum(a2, 0)) # [[2 2 2 2] # [4 4 4 4] # [6 6 6 6]] print(np.cumsum(a2, 1)) # [[2 4 6 8] # [2 4 6 8] # [2 4 6 8]] print(np.cumprod(a2, 0)) # [[2 2 2 2] # [4 4 4 4] # [8 8 8 8]] print(np.cumprod(a2, 1)) # [[ 2 4 8 16] # [ 2 4 8 16] # [ 2 4 8 16]] print(np.cumsum(a2)) # [ 2 4 6 ..., 20 22 24]