目次
NumPy
前回、PythonのNumPyでリスト内の隣り合う要素の差分を計算する方法(np.diff)を紹介しました。
【NumPy】リスト内の隣り合う要素の差分を計算する方法(np.diff)[Python]
NumPy 前回、PythonのNumPyで日時を扱うnp.datetime64の使い方、特にnp.arangeを使って連続した日時をもつリストの作成方法を紹介しました。 今回はNumPyでリスト内の隣…
今回はNumPyでndarray内のゼロではない要素の数を数える方法(np.count_nonzero)を紹介します。
それでは始めていきましょう。
np.count_nonzero
ndarray内のゼロではない要素の数を数えるには「np.count_nonzero(ndarray)」を用います。
import numpy as np
a = np.array([1, 2, 0, 0, 3])
print(np.count_nonzero(a))
実行結果
3
2次元以上のndarrayに対しても使えます。
import numpy as np
b = np.array([[1, 2, 0, 0, 3],
[0, 4, 1, 0, 2],
[5, 1, 0, 0, 0]])
print(np.count_nonzero(b))
実行結果
8
2次元以上のndarrayに対しては軸を設定することにより、その軸方向の要素でゼロではない要素の数を数えることができます。
2次元の場合、「axis=0」とすると縦方向で、「axis=1」とすると横方向でのゼロでない要素の数が得られます。
import numpy as np
b = np.array([[1, 2, 0, 0, 3],
[0, 4, 1, 0, 2],
[5, 1, 0, 0, 0]])
print(np.count_nonzero(b, axis=0))
print(np.count_nonzero(b, axis=1))
実行結果
[2 3 1 0 2]
[3 3 2]
3次元の場合は3つの軸があるので、「axis=2」まで設定できます。
import numpy as np
c = np.array([[[1, 2, 3], [0, 2, 3], [0, 0, 3]],
[[1, 2, 0], [1 ,0, 0], [1, 0, 3]]])
print(np.array(c))
print(np.count_nonzero(c))
print(np.count_nonzero(c, axis=0))
print(np.count_nonzero(c, axis=1))
print(np.count_nonzero(c, axis=2))
実行結果
[[[1 2 3]
[0 2 3]
[0 0 3]]
[[1 2 0]
[1 0 0]
[1 0 3]]]
11
[[2 2 1]
[1 1 1]
[1 0 2]]
[[1 2 3]
[3 1 1]]
[[3 2 1]
[2 1 2]]
np.count_nonzeroでTrueの数を取得
np.count_nonzeroでbool値のndarrayを与えるとTrueの数を数えることができます。
それはbool値(True/False)の場合、Falseが0、Trueが1の値が当てはめられているためです。
import numpy as np
d1 = np.array([True, False, False])
d2 = np.array([1, 0, 0])
print(np.count_nonzero(d1))
print(np.count_nonzero(d2))
実行結果
1
1
つまりnp.count_nonzeroの引数に返り値がbool値となる様、リストと条件を渡すことで、Trueの数を返してくれます。
import numpy as np
a = np.array([1, 2, 0, 0, 3])
print(np.count_nonzero(a>1))
実行結果
2
ただしNumPyのndarrayではなく通常のリストをそのまま渡してしまうとエラーとなるので注意です。
import numpy as np
e = [1, 2, 0, 0, 3]
print(np.count_nonzero(e))
print(np.count_nonzero(e>1))
実行結果
3
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[5], line 6
3 e = [1, 2, 0, 0, 3]
5 print(np.count_nonzero(e))
----> 6 print(np.count_nonzero(e>1))
TypeError: '>' not supported between instances of 'list' and 'int'
次回はbool値のリストでTrueの値の数を数える方法を紹介します。
ではでは今回はこんな感じで。
コメント