看来 Numpy 2 引入了自己的独立版本float64(nan)
- 不同于np.nan
。现在回归测试失败,因为虽然
>>> np.nan is np.nan
True
我们现在有
>>> np.nan is np.float64("nan")
False
(另外 json 无法序列化这些新的NaN
s)。
他们为什么做出这样的改变?
有没有办法自动将 numpy 浮点数转换为普通浮点数?
看来 Numpy 2 引入了自己的独立版本float64(nan)
- 不同于np.nan
。现在回归测试失败,因为虽然
>>> np.nan is np.nan
True
我们现在有
>>> np.nan is np.float64("nan")
False
(另外 json 无法序列化这些新的NaN
s)。
他们为什么做出这样的改变?
有没有办法自动将 numpy 浮点数转换为普通浮点数?
有几种 NaN(见下文,NaN作为参考),python 可以重用对象,也可以不重用。
X is Y
作为单元测试的一部分使用是这里的核心问题。例如
np.inf - np.inf
产量np.nan
:但是:
如果你想知道某个对象是否为 NaN,请始终使用
np.isnan
(或math
或pandas
等效项),而不要使用对象比较 或is
:有关 NaN 和 Python 对象的更多信息
NaN 的编码方式并不单一。可能存在静默 NaN(模糊操作)或信号 NaN(错误操作)。此外,Python 可以重用对象……或者不重用。
运行
np.nan is np.nan
python 时对两者使用相同的对象,如果你np.log(-1) is np.log(-1)
在我的计算机上运行,这会创建两个不同的对象,结果是False
:举一个更复杂的例子,在我的计算机上
np.nan
总是给出相同的对象。安静/信号 NaN 总是产生不同的对象。连续生成一种类型的 NaN 似乎有时会重用该对象,有时则不会:再次运行它,所有 ID 都会改变,但模式相同。
np.nan
保持稳定:简而言之,不要这样做。使用
np.isnan