我编写了这段代码来计算以下时间的积分: Q = (Q_max*(1 - (时间/t_0 - 1)**2)) 这是我通过分析得出的。
import numpy as np
Q_max = 400 # W m-2
t_0 = 6*3600 # seconds
dt = 60 # seconds
time = np.arange(0,2*t_0,dt)
Q_integral_A = Q_max*((time)**2/(t_0) - (time)**3/(3*(t_0)**2))
但是,我发现 Q_integral_A 给出了错误的解决方案。在尝试了很多东西之后,我发现执行以下操作会得到正确的解决方案(将第二个“时间”除以 1):
Q_integral_B = Q_max*((time)**2/(t_0) - (time/1)**3/(3*(t_0)**2))
这里发生了什么?为什么 Q_integral_A 和 Q_integral_B 之间存在差异?
使用的版本: Python 3.8.5 numpy 1.20.3 spy 4.2.5
最佳答案
我自己研究了问题,得到了同样的结果。所以一开始time
是一个int32,但是当你执行time/1
时它就变成了float64。它本身不应该带来问题,但是 time
包含一些大数字,将它们提高到 3 次方会导致溢出( here's what i get ),但它不会影响 float ,因为它适用于不同的方式。
要解决这个问题,只需传递 dtype="int64"
time = np.arange(0, 2*t_0, dt, dtype = "int64")
,但它对于更大的数字也无法解决问题。
关于python - 为什么在我的代码中 np.array**3 会导致与 (np.array/1)**3 不同的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74192296/