とあるメーカーエンジニアの趣味備忘録

Python, マイコンいじり, 日々の呟きなど

クラス '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' 型に変換する必要がある.