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]))
我又得到了 1410065408 这样的愚蠢结果,而不是 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))
早上好,当我使用下面的代码时,我得到了一个错误的结果
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]))
我又得到了 1410065408 这样的愚蠢结果,而不是 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))