为什么在Python/Numpy中将“数字”值转换为布尔值时不等于True?

2024-09-29 21:58:07 发布

您现在位置:Python中文网/ 问答频道 /正文

当将NumPy非数字值转换为布尔值时,它变为真,例如如下所示。

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

这与我直觉上的预期完全相反。这种行为是否有合理的原则?

(我怀疑在八度音阶中可能会出现同样的行为。)


Tags: importnumpytrueasnp数字nanbool
3条回答

0.0是唯一错误的浮点值,因为这是语言设计者认为最有用的。努比只是跟着。(当bool(float('nan'))True时,bool(np.nan)False会很奇怪)。

我想这可能是因为这就是整数的工作原理。诚然,整数没有NaN或inf类型的值,但我认为特殊情况不足以打破规则。

这不是特定于NumPy的,但与Python对待NaNs的方式一致:

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

规则在documentation中阐明。

我认为可以合理地说,楠的真值应该是假的。然而,这不是语言现在的工作方式。

Pythontruth-value testing声明将下列值视为False

  • zero of any numeric type, for example, 0, 0L, 0.0, 0j.

Numpy可能选择坚持这种行为,并防止NaN在布尔上下文中计算到False。但是请注意,您可以使用^{}来测试NaN。

相关问题 更多 >

    热门问题