Skip to main content
 首页 » 编程设计

python之使用 numpy.NAN 初始化数组的奇怪发现

2025年05月04日10xxx_UU

我在使用 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 is numpy.NAN 设为 True。将 NAN 分配给数组时会发生什么?

还有一个问题是,当数组中的一些元素是NAN时,如何区分它们呢?多谢!

请您参考如下方法:

这是一个 NaN。只是 is 与 NumPy 数组的工作方式不同。当你分配

a[:] = numpy.NAN 

NumPy 实际上并没有使用对 numpy.NAN 对象的引用来填充 a。相反,它在 C 级别用 NaN 值的 double 值填充数组。

当您随后使用 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)