np.convolve 和 10**9 有什么问题?

What is the problem of np.convolve with 10**9?

早上好,当我使用下面的代码时,我得到了一个错误的结果

import numpy as np
print(np.convolve([10**9], [ 10**9]))

我得到:-1486618624 而我应该得到:(10 的 9 次方)*(10 的 9 次方)=(10 的 18 次方)

我该如何克服这个问题? 很好奇我通过使用得到了正确的结果:

print(np.convolve([10**10], [ 10**8]))

这给了我 1000000000000000000

当我这样做时:

print(np.convolve([10], [ 10**9]))

我又得到了 141006540​​8 这样的愚蠢结果,而不是 10 的 10 次方。看起来每次出现 10 的 9 次方时,我都会得到奇怪的结果。 谢谢

注意10**9是一个整数,在numpy中被解释为int32,即32位整数。该类型可以表示的最大值是 2147483647,如果大于该值,就会溢出。如果您想使用整数类型,请改用 np.int64 ,否则使用浮点数,例如np.float:

np.convolve(np.array([10**9], dtype=np.int64), np.array([10**9], dtype=np.int64))