含NaN值时列表与NumPy数组比较返回False的原因是什么?
为什么包含NaN的数组与列表比较返回False?
这个现象的核心原因是NaN(Not a Number)的比较规则——根据IEEE 754浮点数标准,NaN和任何值(包括它自己)进行==比较时,结果都会是False。
你看你的代码里,aa[0]和bb[0]都是[np.nan, np.nan],但当你用==逐元素比较时,np.nan == np.nan的结果是False,自然np.all(aa[0] == bb[0])就返回False了;而aa[1]和bb[1]里的都是普通浮点数,==比较逻辑正常,所以返回True。
如果要正确比较包含NaN的数组,numpy提供了专门的解决方案:
- 用
np.array_equal并设置equal_nan=True参数,它会把NaN视为相等:np.array_equal(aa, bb, equal_nan=True) # 返回True - 也可以结合
np.isnan来判断NaN的位置是否一致,再结合普通值的比较:nan_mask = np.isnan(aa) == np.isnan(bb) value_mask = aa[~nan_mask] == bb[~nan_mask] np.all(nan_mask) and np.all(value_mask) # 返回True
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

