逻辑与,与带浮点数的 numpy nan 比较

Logical and, comparison with numpy nan with float

我不确定为什么,但是当我对 numpy.nan 值使用逻辑 & 比较时,该语句得到执行。在此示例中,if 语句表示如果 xx 和 yy 不是 nan 值,则执行 if 语句。由于 xx 是一个 nan 值,if 语句不应该被执行,但它仍然会执行。 我改用 xx = None 尝试了相同的代码,然后它工作得很好(没有被执行) 任何想法为什么会这样?

xx = np.nan
yy = 20
if (xx != np.nan) & (yy != np.nan):
    print('if statement executed')

Out:
if statement executed

因为np.nan != np.nanThere are some good reasons for this behaviour,但这是我们不得不忍受的不直观的事情之一。使用 np.isnan 来检查 NaN。

注意np.nan is np.nan,但一般不建议使用is进行检查,因为实际上有多个个浮点值是NaN,它们不是相同的常量(例如,某些其他算法可能 return 是 isnan 的值,但 is not np.nan)。

注意

import numpy as np
print(np.nan != np.nan)

给出:

True

您可以使用 numpy.isnan 函数来检查。