对 numpy 数组进行操作会为大数提供不正确的值

Operating on numpy array gives incorrect values for large numbers

我需要对一些相当大的数字进行运算。在这里,我试图在数组中取一个大数的立方体。

import numpy as np
array=np.array([149597500000,3,4],dtype=np.int64)
print(array**3)

这给出了

[4258029614102052864                  27                  64]

后两个值是正确的,但第一个值相差许多数量级。相比之下,

print(149597500000**3)

给予

3347904087604984375000000000000000

这是正确的结果。这与整数溢出有关吗?如果是这样,为什么在数组外执行操作不会导致溢出?我该如何解决这个问题?对不起,如果这是一个基本问题;我从来没有正式地学过 Python。

我会说立方体的第一个数字的位数至少为 3*log2(149597500000)+1=113。 这不适合 64 位

a = 149597500000
b= a**3
print(a.bit_length(), b.bit_length())

returns: 38, 112

您可以使用 dtype=object 或 np.float64 将大数存储在 numpy 中,参见