np.arange()不能正确平方

时间:2017-10-20 22:57:06

标签: python numpy

我在PyCharm尝试了一些东西,所以我写了一段简单的代码,包括:

xlist = np.arange(99995,99996)
print(xlist*xlist)
>>> array([1409065433])

如您所见,答案是错误的!我应该获得9999000025.我偶然发现了这个因为我最初写道:

xlist = np.arange(0,100000)

for x in xlist:
    print(x)
    z = x * x
    print(z)
print(xlist*xlist)

并且得到了许多奇怪的结果,包括x> 90000左右的负值

我的三个朋友测试了这段代码,其中两个获得了与我相同的结果(在Windows上),另一个在Linux上得到了正确的结果,所以它似乎依赖于操作系统......

有人知道到底发生了什么事吗?

1 个答案:

答案 0 :(得分:3)

9999000025不适合32位int。与常规Python整数不同,NumPy数据类型是固定大小的,并且它们可以容纳的值有限制。

此处的修复方法是指定dtype=np.int64

x = np.arange(99995,99996, dtype=np.int64)
print(x * x)
Out[155]: array([9999000025])