首页 文章

Numpy计算错误[重复]

提问于
浏览
8

这个问题在这里已有答案:

我像这段代码一样使用numpy

>>>import numpy as np
>>>a=np.arange(1,100000001).sum()
>>>a
987459712

我猜结果必须是5000000050000000

我注意到,直到五个数字,结果还可以 . 有人知道发生了什么事吗?

问候

2 回答

  • 9

    Numpy在这里没有犯错 . 这种现象称为integer overflow .

    x = np.arange(1,100000001)
    print(x.sum())  # 987459712
    print(x.dtype)  # dtype('int32')
    

    arange 中用于给定输入的32位整数类型根本无法容纳5000000050000000.最多可能需要2147483647 .

    如果显式使用更大的整数或浮点数据类型,则会得到预期的结果 .

    a = np.arange(1, 100000001, dtype='int64').sum()
    print(a)  # 5000000050000000
    
    a = np.arange(1.0, 100000001.0).sum()
    print(a)  # 5000000050000000.0
    
  • 5

    我怀疑你使用的是Windows,其结果的数据类型是32位整数(而对于那些使用,例如,Mac OS X或Linux,数据类型是64位) . 请注意 5000000050000000 % (2**32) = 987459712

    尝试使用

    a = np.arange(1, 100000001, dtype=np.int64).sum()
    

    要么

    a = np.arange(1, 100000001).sum(dtype=np.int64)
    

    附:任何不使用Windows的人都可以按如下方式重现结果:

    >>> np.arange(1, 100000001).sum(dtype=np.int32)
    987459712
    

相关问题