2016-11-06 58 views
2

观察无效值 “少” np.nan在阵列中进行比较时,

np.nan < 0 

False 

np.array([np.nan]) < 0 

array([False], dtype=bool) 

然而

np.array([-1, np.nan]) < 0 
//anaconda/envs/3.5/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: invalid value encountered in less 
    if \__name\__ == '\__main\__': 
array([ True, False], dtype=bool) 

是什么错误呢?

+0

尝试再次运行这些测试。 '如果name =='main':'看起来更像是一个语法错误,而不是一个真正的numpy问题。确保错误是可重现的。 – hpaulj

+0

@hpaulj当我回到电脑时,我会重新发布。我测试了很多次。必须是某个版本的东西。我将包含该信息或者打开一个问题。 – piRSquared

+0

@hpaulj它只是格式化的问题,它被复制粘贴到SO上。 'if __name__ =“__main __”'部分来自ipython报告警告的方式('np.less'在单独一行中)。 –

回答

3

这只是一个警告,不是一个例外。 Numpy会尽力帮助您,并报告您的阵列中有nan。忽略它是安全的。如果警告本身困扰你(或你的用户),您可以禁止它:

with np.errstate(invalid='ignore'): 
    np.less([np.nan, 0], 1) 

然而,这真的不推荐,因为它可能会掩盖不太明显的问题,使调试困难,如果你需要找到一个nan来自冗长的计算。

注意一个nan的语义:nan > 0nan < 0nan < nannan == nan都是False

还要注意的是,在numpy的(不像例如熊猫)nan的真正含义无效不可

+0

nan =不是数字 – adr