<分区>
我正在像这段代码一样使用 numpy
>>>import numpy as np
>>>a=np.arange(1,100000001).sum()
>>>a
987459712
我想结果一定是这样的 5000000050000000
我注意到直到五个数字结果都还可以。 有人知道发生了什么吗?
问候
<分区>
我正在像这段代码一样使用 numpy
>>>import numpy as np
>>>a=np.arange(1,100000001).sum()
>>>a
987459712
我想结果一定是这样的 5000000050000000
我注意到直到五个数字结果都还可以。 有人知道发生了什么吗?
问候
最佳答案
Numpy 在这里没有犯错。这种现象被称为 integer overflow .
x = np.arange(1,100000001)
print(x.sum()) # 987459712
print(x.dtype) # dtype('int32')
arange
中用于给定输入的 32 位整数类型根本无法容纳 5000000050000000。它最多可以容纳 2147483647。 .
如果您显式使用更大的整数或 float 据类型,您将获得预期的结果。
a = np.arange(1, 100000001, dtype='int64').sum()
print(a) # 5000000050000000
a = np.arange(1.0, 100000001.0).sum()
print(a) # 5000000050000000.0
关于python - Numpy 计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43209391/