python - 使用 numpy arange 看似不一致的 RuntimeWarning
问题描述
当我的朋友运行以下代码时,它会给出 RuntimeWarning 并返回“inf”。但是,如果我运行相同的代码,它会在没有警告的情况下执行并返回一个值。
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 和 range 时会看到不同,而对我来说输出是一样的?
我们都通过 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)
推荐阅读
- c - DeviceIoControl 返回 ERROR_ACCESS_DENIED
- docker - 无法在注册表上访问图像以进行记录
- scrapy - Scrapyd 与 cron + git 挂钩
- dokku - 已部署但未部署的简单 python 应用程序
- git - 如何创建一个 git 更改日志,其中包含自提交以来所有合并分支的名称
- javascript - 收到来自服务器端代码的响应时出现 CORS 错误
- ignite - Ignite 中的复合键
- html - 伪类:访问未按预期工作
- javascript - JS没有在html中生效?
- flutter - 从 url 下载图像并保存在颤振的 sd 卡文件夹中