我在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上得到了正确的结果,所以它似乎依赖于操作系统......
有人知道到底发生了什么事吗?
答案 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])