使用 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)
当我的朋友 运行 执行以下代码时,它给出了 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)