Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy-arange似乎不一致的运行时警告_Python_Numpy_Warnings - Fatal编程技术网

Python 使用numpy-arange似乎不一致的运行时警告

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:

当我的朋友运行以下代码时,它会给出一个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时看到了不同,而对我来说输出是相同的


我们都在64位Windows 10上通过Anaconda使用python 3.7.4和numpy 1.16.5。

这与numpy在创建
arr
时推断的数据类型有关。对我来说,Numpy推断我想要的是
np.int32
&它不够大,不能容纳(10**6)**2,所以最终得到的是
inf

如果您明确地将数据类型声明为say
np.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
即a
c long int
,而不是机器似乎正在使用的
c long long int