python - 为什么在我的代码中 np.array**3 会导致与 (np.array/1)**3 不同的解决方案?

标签 python numpy

我编写了这段代码来计算以下时间的积分: 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 之间存在差异?

screenshot of output

使用的版本: 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/

相关文章:

python - 如何修改算术运算符 (+,-,x)

python - App Engine 应用程序设计问题

python - 使用 Jinja2 的 HTML 模板

python - 如何从自定义分布编写抽样算法?

python 3.6 : Either I miss something either generic typing breaks super chaining for inheritance

python:二维矩阵中更快的局部最大值

numpy - 是否有通过添加两个一维数组来创建二维数组的 numpy 方法?

python-3.x - 类型错误 : conversion from Series to Decimal is not supported

python - 如何将字符串变量缺失值的长度计算为零?

python - 曲线拟合数据问题