Python 使用numpy-arange似乎不一致的运行时警告
当我的朋友运行以下代码时,它会给出一个RuntimeWarning并返回“inf”。但是,如果我运行相同的代码,它将在没有警告的情况下执行并返回一个值Python 使用numpy-arange似乎不一致的运行时警告,python,numpy,warnings,Python,Numpy,Warnings,当我的朋友运行以下代码时,它会给出一个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:
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时看到了不同,而对我来说输出是相同的
我们都在64位Windows 10上通过Anaconda使用python 3.7.4和numpy 1.16.5。这与numpy在创建
arr
时推断的数据类型有关。对我来说,Numpy推断我想要的是np.int32
&它不够大,不能容纳(10**6)**2,所以最终得到的是inf
值
如果您明确地将数据类型声明为saynp.float64
,问题就会自行解决
arr = np.arange(k, 0, -1, dtype=np.float64)
首先使用
print()
查看arange()
和range()
的值。同一版本的W10 x64 Python 3.7在LInux Mint(64位)、Python 3.7.7(64位)numpy 1.18.4(无Anaconda)上都能正常工作。相同的Python 2.7.17(64位),numpy 1.16.6您在两台计算机上都使用64位
Python吗?@furas刚刚检查过。我们都在使用64位
Python。@furas printing显示arange()和range()的值相同,当然只是arange()作为numpy数组。谢谢,这确实解释了她这方面的问题。但我不明白为什么我没有看到同样的行为。对于同一版本的numpy,为什么numpy显然会推断出我和我朋友之间的不同数据类型?@L.N.M你得到了什么值?1.6449330668487263@DrBwtsI必须承认这很奇怪。对于W10 x64机器,默认值应为int32
即ac long int
,而不是机器似乎正在使用的c long long int
。