概要
二次元配列についても、一次元配列と同様な統計関係のメソッド群がある。
二次元についても、同じ機能のメソッドがnumpy、ndarrayのメソッドとして準備されている。
二次元配列の場合は、最小・総和・平均などの計算を全要素/列単位/行単位のいずれで行うかを区別する。具体例として、以下の3×3配列の最小値min()を全要素、列単位、行単位で計算した例を示す。
1 2 3 4 5 6 7 8 |
m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(np.min(m)) print(np.min(m, axis=0)) print(np.min(m, axis=1)) # 1 # [1 2 3] # [1 4 7] |
引数axis
を指定しないと全要素が対象となり、axis=0
を指定すると列ごとの計算結果を一次元の配列に、axis=1を指定すると行ごとの計算結果を一次元の配列にして返す。
axis=1の場合、計算は行ごとに行われるが、結果は列ベクトルではなく行ベクトルの配列となる。
また、numpyのメソッドではなくndarrayのメソッドでも同じように使える。
1 2 3 4 5 6 7 8 |
m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(m.min()) print(m.min(axis=0)) print(m.min(axis=1)) # 1 # [1 2 3] # [1 4 7] |
最小値・最大値
最小値/最大値を返す。
numpy.min(m, axis=0/1)
numpy.max(m, axis=0/1)
m.min(axis=0/1)
m.max(axis=0/1)
結果は同じなので、numpyのメソッドについて実行例を示す。
1 2 3 4 5 6 7 8 9 10 |
m = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(np.min(m)) # 1 print(np.min(m, axis=0)) # [1 2 3] print(np.min(m, axis=1)) # [1 4 7] print(np.max(m)) # 9 print(np.max(m, axis=0)) # [7 8 9] print(np.max(m, axis=1)) # [3 6 9] |
総和・総積
一次元配列の全要素の和・積を返す。
numpy.sum(m, axis=0/1)
numpy.prod(m, axis=0/1)
m.sum(axis=0/1)
m.prod(axis=0/1)
1 2 3 4 5 6 7 8 9 10 |
m = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(np.sum(m)) # 45 print(np.sum(m, axis=0)) # [12 15 18] print(np.sum(m, axis=1)) # [ 6 15 24] print(np.prod(m)) # 362880 print(np.prod(m, axis=0)) # [ 28 80 162] print(np.prod(m, axis=1)) # [ 6 120 504] |
平均・分散・標準偏差
一次元配列の要素の平均、分散、標準偏差を返す。分散は標本分散なので、不偏分散が必要な場合はvar()*n/(n-1)
とする(ただしn=len(v)
)。
numpy.mean(m, axis=0/1)
numpy.var(m, axis=0/1)
numpy.std(m, axis=0/1)
m.mean(axis=0/1)
m.var(axis=0/1)
m.std(axis=0/1)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
m = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(np.mean(m)) # 5.0 print(np.mean(m, axis=0)) # [4. 5. 6.] print(np.mean(m, axis=1)) # [2. 5. 8.] print(np.var(m)) # 6.666666666666667 print(np.var(m, axis=0)) # [6. 6. 6.] print(np.var(m, axis=1)) # [0.66666667 0.66666667 0.66666667] print(np.std(m)) # 2.581988897471611 print(np.std(m, axis=0)) # [2.44948974 2.44948974 2.44948974] print(np.std(m, axis=1)) # [0.81649658 0.81649658 0.81649658] |
累積和・累積積
一次元配列の要素について先頭から累積して積・和を計算し、それらを要素とする配列を返す。
二次元配列でaxis=0を指定した場合、列ごとに行方向に累積した値が並べられた二次元配列となり、axis=1を指定した場合は行ごとに列方向に累積した値が並べられた二次元配列となる。
numpy.cumsum(m)
numpy.cumprod(m)
m.cumsum()
m.cumprod()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
m = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(np.cumsum(m)) print(np.cumsum(m, axis=0)) print(np.cumsum(m, axis=1)) print(np.cumprod(m)) print(np.cumprod(m, axis=0)) print(np.cumprod(m, axis=1)) # [ 1 3 6 10 15 21 28 36 45] # [[ 1 2 3] # [ 5 7 9] # [12 15 18]] # [[ 1 3 6] # [ 4 9 15] # [ 7 15 24]] # [ 1 2 6 24 120 720 5040 40320 362880] # [[ 1 2 3] # [ 4 10 18] # [ 28 80 162]] # [[ 1 2 6] # [ 4 20 120] # [ 7 56 504]] |