11,327 views
この記事は最終更新から 1812日 が経過しています。
numpy配列から非ゼロ要素のみを抽出したい。
5行5列の配列を作成する。
>>> import numpy as np >>> a = (np.random.rand(5,5) * 10).astype(np.int32) >>> a array([[9, 5, 3, 3, 5], [3, 7, 9, 3, 0], [4, 6, 6, 4, 2], [2, 0, 5, 8, 8], [9, 0, 9, 9, 9]], dtype=int32)
非ゼロの要素の行方向、列方向のインデックスを取得する。
>>> np.nonzero(a)
(array([0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4]),
array([0, 1, 2, 3, 4, 0, 1, 2, 3, 0, 1, 2, 3, 4, 0, 2, 3, 4, 0, 2, 3, 4]))
出力結果を見ると、(1,4),(3,1),(4,1)が除外されている。確かにそこには0が格納されている。
非ゼロの要素数をカウントする。
>>> np.nonzero(a)[0].size
22
非ゼロの要素の平均を算出する。
>>> a.sum().astype(np.float32) / np.nonzero(a)[0].size 5.8181818181818183