4.Numpy配列の計算

4.3.集約関数

(1)合計

配列各要素の絶対値をとります。
numpy.sum(x, axis, dtype, out, keepdims, initial, where)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
axis 省略可 None 合計計算する方向を指定します。
dtype 省略可 None 出力する型を指定します。
>>> a
array([[1, 2],
       [3, 4]])

#すべての要素の合計
>>> np.sum(a)
>>> a.sum()
10		#同じ結果

#縦方向の合計
>>> np.sum(a,axis=0)
>>> a.sum(0)
array([4, 6])	#同じ結果

節はじめに戻る


(2)平均

  • numpy.mean(x, axis, dtype, out, keepdims)
  • x.mean(axis, dtype, out, keepdims)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
axis 省略可 None 平均計算する方向を指定します。
dtype 省略可 None 出力する型を指定します。
>>> x
array([0.3, 0.5, 1.5, 1.8, 2.5])
>>> y
array([0.01, 0.05, 0.08])

#四捨五入(.5は偶数に丸める)
>>> np.round(x)
array([0., 0., 2., 2., 2.])

#または
>>> x.round()
array([0., 0., 2., 2., 2.])

#小数点の位置を指定した四捨五入(.5は偶数に丸める)
>>> np.round(y,1)
array([0. , 0. , 0.1])

#または
>>> y.round(1)
array([0. , 0. , 0.1])

データの重みを考慮したい場合は、averageを使います。
numpy.average(x, axis, weights, returned)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
axis 省略可 None 合計計算する方向を指定します。
weights 省略可 None データの重みを表す配列を指定します。
>>> x
array([0.3, 0.5, 1.5, 1.8, 2.5])
>>> y
array([10. , 10. ,  1. ,  1. ,  0.5])

#平均
>>> np.average(x)
>>> x.mean()
1.3199999999999998	#同じ結果

#重みを考慮した平均
>>> np.average(x,weights=y)
0.5577777777777778

節はじめに戻る


(3)標準偏差

  • numpy.std(x, axis, dtype, out, ddof, keepdims)
  • x.std(x, axis, dtype, out, ddof, keepdims)
引数 設定 デフォルト 説明
x 必須 - 配列を指定します。
axis 省略可 None 標準偏差計算する方向を指定します。
dtype 省略可 None データ出力する型を指定します。
ddof 省略可 0 自由度を設定します(N-ddof:母集団なら0、サンプル集団なら1)。
>>> x
array([0.3, 0.5, 1.5, 1.8, 2.5])

#標準偏差(母集団)
>>> np.std(x)
>>> x.std()
0.8207313811473276

#サンプル集団の場合
>>> np.std(x,ddof=1)
>>> x.std(ddof=1)
0.9176055797563569

節はじめに戻る


(4)最大(max)/最小(min)

  • numpy.max(x, axis, dtype, out, keepdims)
  • x.max(axis, dtype, out, keepdims)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
axis 省略可 None 標準偏差計算する方向を指定します。
dtype 省略可 None データ出力する型を指定します。
>>> a
array([[1, 2],
       [3, 4]])

#すべての要素の最大
>>> np.max(a)
>>> a.max()
4		#同じ結果

#列ごとの最大値を取得
>>> np.max(a,axis=0)
>>> a.max(0)
array([3, 4]))	#同じ結果
nanが含まれる場合、nan無視して最大(最小)をとるにはnanmax(nanmin)を用います(使い方はnumpy.maxと同じなので割愛します)。
numpy.nanmax(x, axis, dtype, out, keepdims)

節はじめに戻る


(5)中央値

numpy.median(x, axis, out, overwirte_input, keepdims)
引数 設定 デフォルト 説明
x 必須 - スカラーまたは配列を指定します。
axis 省略可 None 標準偏差計算する方向を指定します。
>>> a
array([[1, 2],
       [3, 4]])

#すべての要素の中央値
>>> np.median(a)
2.5

#縦方向ごとの中央値
>>> np.median(a, axis=0)
array([2., 3.])

節はじめに戻る


4.4.配列のソート

(1)ソート

numpy.sort(x, axis, dtype, kind, order)
引数 設定 デフォルト 説明
x 必須 - ソートする配列を指定します。
axis 省略可 -1 ソートする方向を指定します。
>>> x
array([1, 2, 3, 3, 4, 5, 6])

#ソート
>>> np.sort(x)
array([1, 2, 3, 3, 4, 5, 6])

>>> r
array([[2, 4, 4, 6, 0],
       [6, 0, 7, 4, 2],
       [1, 7, 1, 9, 8],
       [5, 9, 7, 9, 1]])

#軸方向を指定せずソート(軸方向は-1なのでaxis=1 → 横方向にソート)
>>> np.sort(r)
array([[0, 2, 4, 4, 6],
       [0, 2, 4, 6, 7],
       [1, 1, 7, 8, 9],
       [1, 5, 7, 9, 9]])

#axis=0でソート(縦方向にソート)
>>> np.sort(r,axis=0)
array([[1, 0, 1, 4, 0],
       [2, 4, 4, 6, 1],
       [5, 7, 7, 9, 2],
       [6, 9, 7, 9, 8]])

#axis=Noneでソート(すべての要素でソート)
>>> np.sort(r, axis=None)
array([0, 0, 1, 1, 1, 2, 2, 4, 4, 4, 5, 6, 6, 7, 7, 7, 8, 9, 9, 9])
numpy.sortでは元の配列は書き換わりませんが、x.sortではソートされた結果でxは上書きされます。
x.sort(axis, dtype, kind, order)
>>> p
array([[2, 4, 4, 6, 0],
       [6, 0, 7, 4, 2],
       [1, 7, 1, 9, 8],
       [5, 9, 7, 9, 1]])

#ソート
>>> p.sort()
>>> p		#pはソートした結果で上書きされている
array([[0, 2, 4, 4, 6],
       [0, 2, 4, 6, 7],
       [1, 1, 7, 8, 9],
       [1, 5, 7, 9, 9]])

節はじめに戻る


(2)ソートした要素のインデックス

numpy.argsort(x, axis, dtype, kind, order)
引数 設定 デフォルト 説明
x 必須 - ソートする配列を指定します。
axis 省略可 -1 ソートする方向を指定します。
>>> r
array([[2, 4, 4, 6, 0],
       [6, 0, 7, 4, 2],
       [1, 7, 1, 9, 8],
       [5, 9, 7, 9, 1]])

#ソートした要素のインデックス
>>> np.argsort(r)
array([[4, 0, 1, 2, 3],
       [1, 4, 3, 0, 2],
       [0, 2, 1, 4, 3],
       [4, 0, 2, 1, 3]], dtype=int64)

>>> np.argsort(r, axis=None)
array([ 6,  4, 19, 12, 10,  0,  9,  8,  2,  1, 15,  3,  5,  7, 11, 17, 14,
       18, 13, 16], dtype=int64)

節はじめに戻る


(3)部分ソート

numpy.partition(x, kth, axis, kind, order)
引数 設定 デフォルト 説明
x 必須 - ソートする配列を指定します。
kth 必須 - 小さい順に取得する要素の順位を、整数または配列で指定します。
axis 省略可 -1 ソートする方向を指定します。
>>> x
array([6, 0, 7, 4, 2])

#配列の中から小さいもの2つを左側に、残り3つを右側に配置
>>> np.partition(x,2)
array([0, 2, 4, 7, 6])

#配列の中から小さいもの3つを左側に、残り2つを右側に配置
>>> np.partition(x,3)
array([4, 2, 0, 6, 7])

#配列の中から小さいもの2つを左に、次に小さいもの2つ(2+2=4)をその右隣に、残り1つを右側に配置
>>> np.partition(x,[2,4])
array([0, 2, 4, 6, 7])

>>> r
array([[2, 4, 4, 6, 0],
       [6, 0, 7, 4, 2],
       [1, 7, 1, 9, 8],
       [5, 9, 7, 9, 1]])

#軸方向を指定せずソート(軸方向は-1なのでaxis=1 → 横方向にソート)
>>> np.partition(r,2)
array([[0, 2, 4, 6, 4],
       [0, 2, 4, 7, 6],
       [1, 1, 7, 9, 8],
       [1, 5, 7, 9, 9]])

#axis=1を指定 → 横方向に部分ソート(上と同じ)
>>> np.partition(r,2,axis=1)
array([[0, 2, 4, 6, 4],
       [0, 2, 4, 7, 6],
       [1, 1, 7, 9, 8],
       [1, 5, 7, 9, 9]])

#要素全体から小さい2つの値を右側に配置
>>> np.partition(r,2,axis=None)
array([0, 0, 1, 6, 2, 6, 4, 7, 4, 2, 4, 7, 1, 9, 8, 5, 9, 7, 9, 1])

節はじめに戻る


(4)部分ソートした要素のインデックス

numpy.argpartition(x, axis, kind, order)
引数 設定 デフォルト 説明
x 必須 - ソートする配列を指定します。
kth 必須 - 小さい順に取得する要素の順位を、整数または配列で指定します。
axis 省略可 -1 ソートする方向を指定します。
>>> x
array([6, 0, 7, 4, 2])

#配列の中から小さいもの2つのインデックスを左側に、残り3つを右側に配置
>>> np.argpartition(x,2)
array([1, 4, 3, 2, 0], dtype=int64)

#配列の中から小さいもの2つのインデックスを左に、次に小さいもの2つ(2+2=4)をその右隣に、残り1つを右側に配置
>>> np.argpartition(x,[2,4])
array([1, 4, 3, 0, 2], dtype=int64)

>>> r
array([[2, 4, 4, 6, 0],
       [6, 0, 7, 4, 2],
       [1, 7, 1, 9, 8],
       [5, 9, 7, 9, 1]])

#軸方向を指定せずソート(軸方向は-1なのでaxis=1 → 横方向にソート)
>>> np.argpartition(r,2)
array([[4, 0, 2, 3, 1],
       [1, 4, 3, 2, 0],
       [0, 2, 1, 3, 4],
       [4, 0, 2, 3, 1]], dtype=int64)

#要素全体から小さい5つの値のインデックスを右側に配置
>>> np.argpartition(r,5,axis=None)
array([ 6, 19, 12, 10,  4,  0,  5,  7,  8,  1,  3, 11,  2, 13, 14, 15, 16,
       17, 18,  9], dtype=int64)

節はじめに戻る


      

参考文献