繁体   English   中英

使用numpy的Python差异化不会产生预期的输出

[英]Python differentiation using numpy not producing expected output

所以,我正在进行一些数值计算。 我已经计算了一个函数( return_times )的大约100,000个点,只能用数字计算,现在想要使用numpy.gradient来获取它的派生。 据我所知( doc ),对于f(x),我可以给出以下参数: numpy.gradient(arr_of_fx_datapoints, arr_of_their_x_values)以使其工作。 这就是我(打算)做的事情。

除了它不起作用。 结果几乎(但不完全)到处都是零。 下面我的代码摘要复制了这个bug(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。

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

NumPy 1.12有一个检查来捕获非标量步骤,但你所使用的NumPy 1.11并没有注意到数组值输入,并且通过尝试将数组作为一个步骤来默默地做错了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM