概要
numpy.bincount()
関数の仕様
- 整数型の配列を引数にとる
- 配列中、同じ値の要素の個数をカウントする
- 0~要素の最大値を要素とし、各要素番号に対応する値の個数を要素とする配列を返す
- 元のデータの要素ごとの重みを指定することができる
使い方
基本形
引数で与えた整数型配列中の同じ値をカウントして、各値ごとの個数を要素とする配列を返す。
1 2 3 4 5 6 |
import numpy as np a = np.array([0, 1, 1, 2, 2, 2, 3, 3]) print(np.bincount(a)) # [1 2 3 2] |
上の結果の意味は、0が1個、1が2個、2が3個、3が2個。
値が飛んでいる場合
引数の配列中、0~最大値までの整数値に対する数をカウントする。値が存在しない場合の個数は0。
1 2 3 4 |
b = np.array([1, 3, 3, 5, 5, 5]) print(np.bincount(b)) # [0 1 0 2 0 3] |
上の例では、0~5までの個数がカウントされ、0, 2, 4は配列中に存在しないので0となっている。
順不同
引数の配列中の要素は昇順である必要はない。
1 2 3 4 |
c = np.array([2, 2, 3, 3, 3, 1]) print(np.bincount(c)) # [0 1 2 3] |
weights
の意味
引数にweights
を指定する場合。
- データの配列と同じ要素数の
weights
の配列を与える。 - 要素をカウントの場合に1ずつ足すのではなく、各要素の位置に対応した重みが加算されていく
1 2 3 4 5 |
w = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6]) d = np.array([1, 2, 4, 2, 4, 4]) print(np.bincount(d, weights=w)) # [0. 0.1 0.6 0. 1.4] |
上の例では以下のように動作している。
- 0は存在しないので0
- 1は0番目に1つだけ存在し、その位置の
weights
の値は0.1 - 2は1番目と3番目に存在するので、
weights
の第1要素0.2と第3要素0.4を加えて0.6 - 3は存在しないので0
- 4は2番目、4番目、5番目にあるので、
weights
の第2要素0.3、第4要素0.5、第5要素0.6を加えて1.4