Remrinのpython攻略日記

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

NumPyの使い方(19) 数え上げ

NumPyの数え上げ(要素のカウント)について。
 
0,1のみのデータから1や0の個数を数える方法

import numpy as np
a1 = np.array([0, 1, 1, 0, 1, 0, 0, 0])

# 1の個数をカウントする例
print(np.count_nonzero(a1))      # 3
print(a1.sum())                  # 3
print(len(np.where(a1 != 0)[0])) # 3

# 0の個数をカウントする例
print(np.count_nonzero(1 - a1))  # 5
print(len(a1) - a1.sum())        # 5

 
0と1を同時にカウントする例

# 例1    
print(np.unique(a1, return_counts=True))
# (array([0, 1]), array([5, 3]))

unique, count = np.unique(a1, return_counts=True)
print(dict(zip(unique, count)))
# {0: 5, 1: 3}

# 例2
from collections import Counter
c = Counter(a1)
print(c)
# Counter({0: 5, 1: 3})

# 例3
c = np.bincount(a1)
print(c)   # [5 3]

CounterについてはCollectionsライブラリを参照
 
0, 1以外のデータからのカウント

a2 = np.array([0, 1, 2, 4 , 2, 4, 4])

# np.uniqueは存在しない値をスルー
u, c = np.unique(a2, return_counts=True)
print(dict(zip(u, c)))
# {0: 1, 1: 1, 2: 2, 4: 3}

# np.bincountは存在しない値を0個とする
print(np.bincount(a2))
# [1 1 2 0 3]