8

nan(numpy で定義されているように) 値を含む可能性のあるデータの論理式を評価しようとすると、驚くべき結果が得られます。

この結果がなぜ生じるのか、正しい方法で実装する方法を理解したいと思います。

私が理解していないのは、これらの式が値を評価する理由です。

from numpy import nan

nan and True
>>> True
# this is wrong.. I would expect to evaluate to nan

True and nan
>>> nan
# OK

nan and False
>>> False
# OK regardless the value of the first element 
# the expression should evaluate to False

False and nan
>>> False
#ok

同様にor:

True or nan
>>> True #OK

nan or True
>>> nan #wrong the expression is True

False or nan
>>> nan #OK

nan or False
>>> nan #OK

値も処理する正しいブール関数を (効率的な方法で) 実装するにはどうすればよいnanですか?

4

2 に答える 2

5

numpy名前空間の述語を使用できます。

>>> np.logical_and(True, np.nan), np.logical_and(False, np.nan)
(True, False)
>>> np.logical_and(np.nan, True), np.logical_and(np.nan, False)
(True, False)
>>>
>>> np.logical_or(True, np.nan), np.logical_or(False, np.nan)
(True, True)
>>> np.logical_or(np.nan, True), np.logical_or(np.nan, False)
(True, True)

EDIT:組み込みのブール演算子は少し異なります。ドキュメントから: x and yと同等if x is false, then x, else yです。したがって、最初の引数が に評価された場合False、それらはそれを返します (いわばブール値の等価物ではありません)。したがって:

>>> (None and True) is None
True
>>> [] and True
[]
>>> [] and False
[]
>>> 

于 2013-06-24T11:46:30.893 に答える