使用 numpy arange 看似不一致的 RuntimeWarning

Seemingly inconsistent RuntimeWarning using numpy arange

当我的朋友 运行 执行以下代码时,它给出了 RuntimeWarning 和 returns "inf"。但是,如果我 运行 相同的代码,它会在没有警告的情况下执行并且 returns 一个值。

import numpy as np
total = 0
k = 10**6
arr = np.arange(k, 0, -1)
for i in arr:
    total += 1/(i**2)
print(total)

这是她的输出:

\Anaconda3\lib\site-packages\ipykernel_launcher.py:7: RuntimeWarning: divide by zero encountered in long_scalars
  import sys
inf

用内置的 range() 替换 np.arange() 解决了问题,她得到了与我相同的输出。

我的问题是:是什么导致她的输出和我的输出不一致?此外,为什么她在使用 np.arange 与范围时看到差异,而对我来说输出是相同的?

我们都通过 Anaconda 使用 python 3.7.4,在 64 位 Windows 10.

上使用 numpy 1.16.5

与创建时 Numpy 推断的数据类型有关 arr。对我来说,Numpy 推断我想要 np.int32 并且它不足以容纳 (10**6)**2 所以你最终得到一个 inf 值。

如果您将数据类型明确声明为np.float64,问题就会自行解决。

arr = np.arange(k, 0, -1, dtype=np.float64)