【NumPy】ndarray内のゼロではない要素の数を数える方法(np.count_nonzero)[Python]

  • URLをコピーしました!
目次

NumPy

前回、PythonのNumPyでリスト内の隣り合う要素の差分を計算する方法(np.diff)を紹介しました。

今回は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の値の数を数える方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次