逻辑与,与带浮点数的 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.nan
。 There 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
函数来检查。
我不确定为什么,但是当我对 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.nan
。 There 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
函数来检查。