クラス 'numpy.bool_' に騙された話
今日も今日とてPython の些細なところに丁寧に躓いていく.
今回は,「'bool'型って1種類じゃないの!?」っていう話である.
そう,1種類ではなかったのである.
標準クラスの'bool'型と,numpyにおいて定義されている’bool’型(正確には 'numpy.bool_' 型)の2種類が存在する.
そのため, 'numpy.bool_' 型の 'False' を 次のように条件判定しても意味がないのである.
import numpy as np data = np.array([1, 2, -1]) result = data[data > 0].any() # data[data > 0] = [True, True, False] # .any() は呼び出し元の配列型インスタンスの要素内に一つでも True が含まれていた場合にTrueを返す. # この場合は,Trueが返却される. if result is True: # numpy.bool 型オブジェクトとbool型オブジェクトの一致判定をしているので,当然一致しているという判定はされない. print(True) else: print(False)
出力結果
False
このようにして条件判定させたいときには,キャストを行うことによって 'numpy.bool_' 型を 'bool' 型に変換する必要がある.