HOWTO · Python
Python でブール値の否定を取得する
このチュートリアルでは、Python でブール値を否定する方法を紹介します。
このページの内容
スカラー式の真偽値を反転するには、Python の not 演算子を使います。NumPy のブール配列では、~ や numpy.logical_not() のような要素ごとの演算を使います。NumPy の bitwise_not() と invert() も、ブール配列の各要素を反転します。
Python の not 演算子でブール値を否定する
not 演算子は、まずオペランドの真偽値を評価し、その結果をブール値で返します。True は False に、False は True になります。ブール値以外も受け取れます。たとえば 1 は真として扱われるため、not 1 は False です。この結果はブール値の False であり、整数の 0 ではありません。
次の例では条件を反転し、結果のブール値を出力します。
a = 1
print(bool(a))
print(not a)
Python の operator モジュールにある operator.not_() 関数でブール値を否定する
標準ライブラリの operator.not_() 関数は、Python の not 演算子に相当する呼び出し可能な関数です。引数の真偽値を評価し、ブール値を返します。リストに対する map() のように、演算を関数として渡す必要がある場合に使えます。
import operator
values = [True, True, False, True, False]
print(operator.not_(True))
print(list(map(operator.not_, values)))
map() は、指定した関数をイテラブルの各項目に適用します。この例では、リストの各項目はブール値で、結果のリストにはそれぞれ反対の値が入ります。
Python で NumPy 配列のブール値を ~ 演算子で否定する
ブール型の NumPy 配列に ~ 演算子を使うと、ビット反転が要素ごとに適用され、各 True が False に、各 False が True に変わります。
import numpy as np
values = np.array([True, True, False, True, False])
print(~values)
このブール配列での動作は、マスクを反転するときに便利です。Python の整数はブール値ではありません。整数に ~ を適用すると整数のビット反転が行われるため、スカラーの真偽値を否定する代わりには使わないでください。
NumPy の bitwise_not() 関数でブール値を否定する
numpy.bitwise_not() はビット演算を関数として呼び出す形式です。ブール配列では各要素を反転し、~ と同じ要素ごとのブール値を生成します。
import numpy as np
values = np.array([True, True, False, True, False])
print(np.bitwise_not(values))
名前の付いた NumPy 演算を使うほうがコードに合う場合は、この関数を使えます。単一の NumPy ブール値にも適用できます。
Python で NumPy の invert() 関数を使ってブール値を否定する
numpy.invert() は、NumPy の要素ごとのビット反転を行う別の関数名です。ブール配列に対する動作は bitwise_not() や ~ と重なります。
import numpy as np
values = np.array([True, True, False, True, False])
print(np.invert(values))
コードで意図が最も伝わりやすい表記を選んでください。~ と同様に、整数データに invert() を適用するとビット反転が行われ、ブール値の真偽を否定する演算にはなりません。
Python で NumPy の logical_not() 関数を使ってブール値を否定する
numpy.logical_not() は論理否定を要素ごとに行います。ブール配列では上記のビット反転関数と同じ値になりますが、関数名から論理的な真偽値を扱うことが明確です。
import numpy as np
values = np.array([True, True, False, True, False])
print(np.logical_not(values))
スカラーの Python 式には not を使い、ブール配列の各要素を反転するには、これらの NumPy 演算で対応する配列結果を得られます。