Numpyのブーリアン配列は、プログラミング言語Pythonの配列データ構造に格納された論理的な「真」「偽」の値を表現するために使用できる配列(値の集合体)の一種です。
論理演算子と組み合わせてブーリアン配列を使用すると、1つまたは複数の複雑な変数から単一の論理値を必要とする場合に、実行時の計算量を削減する効果的な方法となる場合があります。
また、ブール配列は、いくつかの演算を実行する際に、結果配列として有用であることがわかります。
このような構成は一見あまり使用されていないように見えますが、初心者にとっては特に重要で、より柔軟性の高い他の複雑なPythonデータ型に慣れる前にブール変数と配列を使うことになることが多いのです。
Pythonのブール型配列はNumPyというPythonライブラリを使って実装されています。
NumPyには、以下のような特別なデータ型があります。
numpy.BooleanArray(count, dtype=bool) . これは、値が0か1であるbools(ビット整数とは対照的な)の配列になります。
こちらもお読みください。
Numpyのブール型配列の宣言
dtype=boolを使用すると、手動でブーリアン配列を作成することができます。
0′, ‘False’, ‘None’, 空文字列以外のすべての値は、ブーリアン配列では真とみなされる。
import numpy as np
arr = np.array([5, 0.001, 1, 0, 'g', None, True, False, '' "], dtype=bool)
print(bool_arr)
#Output: [True True True False True False True False False] |
Numpyのブール配列 – 関係演算
numpy の boolean 配列に対して関係演算を行うと、条件に一致する値はすべて True、それ以外の値は False と表示されます。
以下のコード例では、ブール配列の値が2と等しいかどうかをチェックする等価演算を示します。
import numpy as np
A = np.array([2, 5, 7, 3, 2, 10, 2])
print(A == 2)
#Output: [True False False False True False True] |
次のような関係演算。
また、”<“, “>”, “<=”, “>=” も同様に計算できます。
また、高次元の配列に対しても同様に操作できる。
import numpy as np
# a 4x3 numpy arrayA = np.array([[35, 67, 23, 90], [89, 101, 55, 12], [45, 2, 72, 33]])
print (A>=35)
#Output: [[ True True False True] [ True True True False] [ True False True False]] |
同様に、True/Falseも、astype()オブジェクトを使ってint型に変換することで、0/1に置き換えることができる。
import numpy as np
A = np.array([[90, 11, 9, 2, 34, 3, 19, 100, 41], [21, 64, 12, 65, 14, 16, 10, 122, 11], [10, 5, 12, 15, 14, 16, 10, 12, 12], [ 49, 51, 60, 75, 43, 86, 25, 22, 30]])
B = A < 20
B.astype(np.int)
#Output: array([[0, 1, 1, 1, 0, 1, 1, 0, 0], [0, 0, 1, 0, 1, 1, 1, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0]]) |
ここで、int 型では 0 が False、1 が True を表します。
Numpyのブール配列 – 論理演算
論理演算は次のようなものです。
AND, OR, NOT, XORのような論理演算も以下の構文で可能です。
numpy.logical_and(a,b)numpy.logical_or(a,b)numpy.logical_not(a,b)# a and b are single variables or a list/array.#Output: Boolean value |
Numpyのブール配列のインデックス
Numpyのプロパティで、ブール配列を使って配列の特定の値にアクセスすることができます。
配列のインデックスについてはこちらもご覧ください。
import numpy as np
# 1D Boolean indexingA = np.array([1, 2, 3])B = np.array([True, False, True])
print(A[B])
# Output: [1, 3] # 2D Boolean indexingA = np.array([4, 3, 7], [1, 2, 5])
B = np.array([True, False, True], [False, False, True])
print(A[B])
#Output: [4, 7, 5] |
結論
Numpyのブール配列を使用すると、各要素を検査することなく、配列の内容が期待するものであることを確認する簡単な方法です。
numpyのブール配列について、その実装方法と操作方法についてよく理解していただけたと思います。
この記事もチェック:ブール配列の要素を反転させる