NumPy 配列のゼロを数える

Vaibhav Vaibhav 2023年1月30日
  1. count_nonzero() を使用して NumPy 配列のゼロをカウントする
  2. where() を使用して NumPy 配列のゼロをカウントする
NumPy 配列のゼロを数える

配列内の要素を数える必要がある場合があります。カウントするとき、条件を関連付けて、その条件を満たす要素をカウントすることがあります。大なり記号、小なり記号、等号などの場合があります。

この記事では、NumPy 配列のゼロを効率的にカウントする方法を学習します。

NumPy には、多次元の NumPy 配列と行列に適用できるあらゆる種類のメソッドが付属しています。また、ゼロをカウントするために使用できるいくつかの関数もあります。

この記事では、そのような 2つのメソッド、count_nonzero()where() について説明します。

count_nonzero() を使用して NumPy 配列のゼロをカウントする

名前が示すように、このメソッドはゼロ以外の要素をカウントします。この関数を使用してゼロをカウントします。

count_nonzero() は、整数値または整数値の配列を返します。

count_nonzero() の構文は次のとおりです。

count_nonzero(a, axis, keepdims)

以下のパラメータがあります。

  • a - 関数がゼロをカウントする配列
  • axis - これはオプションのパラメータであり、ゼロ以外の要素がカウントされる軸または軸のタプルを参照します。このパラメーターのデフォルト値は None です。これは、フラット化された配列でカウントが行われることを意味します。
  • keepdims - これはオプションのブールパラメータです。デフォルトでは、False です。True に設定すると、カウントされた軸はサイズ 1 の寸法として結果に残ります。

それでは、この方法を使用してゼロを数えましょう。最初の方法については、次のコードスニペットを参照してください。

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(f"Number of Non-Zeroes in Array --> {np.count_nonzero(myArray)}")
print(f"Number of Non-Zeroes in Matrix --> {np.count_nonzero(myMatrix)}")
print(f"Number of Zeroes in Array --> {myArray.size - np.count_nonzero(myArray)}")
print(f"Number of Zeroes in Matrix --> {myMatrix.size - np.count_nonzero(myMatrix)}")

出力:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
Number of Non-Zeroes in Array --> 6
Number of Non-Zeroes in Matrix --> 8
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

上記のコードスニペットでは、ゼロ以外の要素の数を数え、配列または行列の合計サイズからゼロ以外の要素の数を差し引くだけです。

この解決策はこの機能の最善の使用法ではないかもしれませんが、以下はそうです。

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray == 0)
print(myMatrix == 0)
print(f"Number of Zeroes in Array --> {np.count_nonzero(myArray == 0)}")
print(f"Number of Zeroes in Matrix --> {np.count_nonzero(myMatrix == 0)}")

出力:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
[False False  True False False  True False False  True]
[[ True  True False False]
 [ True False  True False]
 [False  True False  True]
 [False False  True  True]]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

このソリューションの中核は、コンピュータサイエンスでであるものはすべて 0 として表すことができ、True はゼロ以外の値として表すことができるという原則です。

myArray == 0 ステートメントは、プロパティを満たすすべての要素が True であり、満たさない要素が False である配列を返します。そして、条件自体が要素がゼロかどうかをチェックします。したがって、すべてのゼロ要素が True に変わり、今度はそれらを数える必要があります。そのために、count_nonzero() メソッドを使用します。

こちらは、関数の公式ドキュメントへのリンクです。

where() を使用して NumPy 配列のゼロをカウントする

where() 関数は、指定された条件に基づいて配列から要素をフィルタリングし、フィルタリングされた配列を返します。フィルタリングされた要素のインデックスを返します。この関数を使用して、ゼロのみを持つ配列を作成します。この新しい配列の長さにより、ゼロの数がわかります。

それでは、解決策を見てみましょう。

import numpy as np

myArray = np.array([1, 2, 0, 3, 4, 0, 5, 6, 0])
myMatrix = np.array([[0, 0, 1, 1], [0, 1, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]])
print(myArray)
print(myMatrix)
print(myArray[np.where(myArray == 0)])
print(myMatrix[np.where(myMatrix == 0)])
print(f"Number of Zeroes in Array --> {myArray[np.where(myArray == 0)].size}")
print(f"Number of Zeroes in Matrix --> {myMatrix[np.where(myMatrix == 0)].size}")

出力:

[1 2 0 3 4 0 5 6 0]
[[0 0 1 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 1 0 0]]
[0 0 0]
[0 0 0 0 0 0 0 0]
Number of Zeroes in Array --> 3
Number of Zeroes in Matrix --> 8

上記のコードスニペットでは、ゼロであったすべての要素を除外しました。where() 関数はそれらの要素のインデックスを返しました。さらに、これらのインデックスを使用して元の要素を取得しました。明らかに、それらはすべてゼロになります。最後に、それらのゼロの数を数え、その数を出力しました。

著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.