小编典典

使用numpy的Python差异未产生预期的输出

python

因此,我正在进行一些数值计算。我已经计算了一个return_times只能通过数字计算的函数()的100,000个点,现在想使用来推导它numpy.gradient。据我了解(doc),对于f(x),我可以给出以下参数:numpy.gradient(arr_of_fx_datapoints, arr_of_their_x_values)使它起作用。这就是我(打算做的)事情。

除非它不起作用。结果到处几乎(但不完全)为零。该错误由下面的代码摘要重现(sin ^ 2(x)的形状类似于我的原始函数):

import matplotlib.pyplot as plt
import numpy as np

def find_times(t_arr):
    return np.power(np.sin(t_arr), 2)

t_0 = 0
t_max = np.pi-1E-10
datapoints = 100000

dt = (t_max - t_0) / datapoints
t_points = np.arange(t_0, t_max, dt, dtype=np.float64)
return_times = find_times(t_points)
gd = np.gradient(return_times, t_points)
plt.plot(t_points, gd)
plt.plot(t_points, return_times)
plt.show()

结果令人失望:
在此处输入图片说明

如果我打印gd,则表明它确实不是完全为零:

[             inf   6.28318530e-05   6.28318529e-05 ...,  -1.25666419e-09
  -6.28326813e-10  -3.14161265e-10]

所以:我想念什么?用Python进行数值衍生的最终正确方法是什么?

环境:Linux Mint 18.2 OS,Geany编辑器,NumPy 1.11.0。


阅读 231

收藏
2021-01-20

共1个答案

小编典典

文档没有提及它,但是坐标数组支持是非常新的NumPy 1.13。在以前的NumPy版本中,只能为每个维度指定固定的标量阶跃值。

NumPy 1.12可以检查非标量步骤,但是您正在使用的NumPy 1.11不会注意到数组值的输入,并且通过尝试将数组视为步骤而无提示地执行了错误的操作。

2021-01-20