Remrinのpython攻略日記

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

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]