我在使用numpy.NAN初始化numpy数组时遇到了一些麻烦。
>>> import numpy
>>> a = numpy.zeros(2)
>>> a
array([ 0., 0.])
>>> a[:] = numpy.NAN
>>> a
array([ nan, nan])
>>> a[0] is numpy.NAN
False
为什么?我试图用NAN初始化一个变量,得到var是numpy.NAN为True。将NAN分配给数组时会发生什么?
另一个问题是,当档案中的某些元素是NAN时,我如何将它们与其他元素区分开来?非常感谢!
答案 0 :(得分:9)
这是一个NaN。只是is
不像您认为的那样使用NumPy数组。分配
a[:] = numpy.NAN
NumPy实际上不会向a
填充numpy.NAN
对象的引用。相反,它使用C级别的NaN值填充数组。
然后,当您使用a[0]
访问数组元素时,NumPy没有用于初始化该单元格的原始对象的记录。它只有数值。它必须构造一个新的Python对象来包装该值,而新的包装器与numpy.NAN
不是同一个对象。因此,is
检查会返回False
。
请注意,通常情况下,将数字与is
进行比较无论如何都是个坏主意。通常,您想要的是==
,以比较它们的数值。但是,==
也会为NaN返回False
,因此您需要的是numpy.isnan
:
>>> numpy.isnan(a[0])
True
>>> numpy.isnan(a)
array([ True, True], dtype=bool)