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()
関数はそれらの要素のインデックスを返しました。さらに、これらのインデックスを使用して元の要素を取得しました。明らかに、それらはすべてゼロになります。最後に、それらのゼロの数を数え、その数を出力しました。