48

NumPy Not-a-Number 値をブール値としてキャストすると、たとえば次のように True になります。

>>> import numpy as np
>>> bool(np.nan)
True

これは、私が直感的に期待するものとは正反対です。この行動の根底にある健全な原則はありますか?

(Octave でも同様の動作が発生しているように見えるので、あるのではないかと思います。)

4

4 に答える 4

31

これは NumPy 固有のものではありませんが、Python が NaN を処理する方法と一致しています。

In [1]: bool(float('nan'))
Out[1]: True

ルールはドキュメントに記載されています。

NaN の真偽値は False であるべきだと合理的に主張できると思います。しかし、これは言語が現在どのように機能するかではありません。

于 2013-03-28T15:55:52.897 に答える
7

Pythonの真理値テストでは、次の値が考慮されると述べられていますFalse

  • 0、0L、0.0、0j など、任意の数値型のゼロ。

Numpy はおそらく、この動作に固執し、NaN がFalseブール値のコンテキストで評価されないようにすることを選択しました。ただしnumpy.isnan、 NaN のテストに使用できることに注意してください。

于 2013-03-28T15:54:03.063 に答える
3

0.0は、言語設計者が最も有用であると判断したため、唯一の偽の float 値です。Numpy は単に従います。bool(np.nan)(がFalseであるとは奇妙bool(float('nan'))ですTrue)。

おそらく、それが整数の扱い方だからだと思います。確かに、整数には NaN 型や inf 型の値はありませんが、特殊なケースはルールを破るほど特殊ではないと思います。

于 2013-03-28T15:51:17.137 に答える
2

Numpy は、ここで真偽をテストするための Python 標準に従います。任意の数値型はFalse、その数値がゼロである場合にのみ評価されます。

値を使用した真偽のテストはNaN、他の方法でも直観的ではないことに注意してください (たとえば、 にnan == nan評価されFalseます)。

于 2013-03-28T15:55:39.367 に答える