【发布时间】:2018-01-28 07:04:59
【问题描述】:
所以,我正在做一些数值计算。我计算了一个函数 (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 操作系统、Geany 编辑器、NumPy 1.11.0。
【问题讨论】:
-
你的代码对我来说是一个不同的情节,确实非零
-
@dermen 到底怎么样?...在我得到这张图片 10 秒后,我从字面上粘贴了完整的代码,没有任何变化。怎么回事??
-
我也无法重现这个。虽然我没有 matplotlib 也无法绘制结果,但
gd对我来说有预期的梯度值,gd.max()大约是 1。 -
你是如何执行上面的代码来产生情节的?
-
@ayhan:看起来坐标数组支持很新,NumPy 1.13。 1.12 文档没有。
标签: python numpy math derivative