因此,我正在进行一些数值计算。我已经计算了一个return_times只能通过数字计算的函数()的100,000个点,现在想使用来推导它numpy.gradient。据我了解(doc),对于f(x),我可以给出以下参数:numpy.gradient(arr_of_fx_datapoints, arr_of_their_x_values)使它起作用。这就是我(打算做的)事情。
return_times
numpy.gradient
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,则表明它确实不是完全为零:
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。
文档没有提及它,但是坐标数组支持是非常新的NumPy 1.13。在以前的NumPy版本中,只能为每个维度指定固定的标量阶跃值。
NumPy 1.12可以检查非标量步骤,但是您正在使用的NumPy 1.11不会注意到数组值的输入,并且通过尝试将数组视为步骤而无提示地执行了错误的操作。