gpt4 book ai didi

python - numpy 中的二阶梯度

转载 作者:太空狗 更新时间:2023-10-30 00:40:45 25 4
gpt4 key购买 nike

我正在尝试计算 numpy 中数组的二阶梯度。

a = np.sin(np.arange(0, 10, .01))
da = np.gradient(a)
dda = np.gradient(da)

这就是我想出来的。应该这样做吗?

我在问这个,因为在 numpy 中没有一个选项说 np.gradient(a, order=2)。我担心这种用法是否错误,这就是为什么 numpy 没有实现这一点。

PS1:我知道有 np.diff(a, 2)。但这只是单方面的估计,所以我很好奇为什么 np.gradient 没有类似的关键字。

PS2:np.sin() 是玩具数据 - 真实数据没有解析形式。

谢谢!

最佳答案

我会附上@jrennie 的第一句话 - 这完全取决于。 numpy.gradient 函数要求数据均匀分布(尽管如果是多维数据,则允许在每个方向上有不同的距离)。如果您的数据不符合这一点,那么 numpy.gradient 就没有多大用处。实验数据可能有(好吧,会有)噪音,除了不一定都是均匀分布的。在这种情况下,最好使用 scipy.interpolate 样条函数(或对象)之一。这些可以采用不均匀间隔的数据,允许平滑,并且可以返回高达 k-1 的导数,其中 k 是所请求的样条拟合的阶数。 k 的默认值为 3,因此二阶导数就可以了。示例:

spl = scipy.interpolate.splrep(x,y,k=3) # no smoothing, 3rd order spline
ddy = scipy.interpolate.splev(x,spl,der=2) # use those knots to get second derivative

像 scipy.interpolate.UnivariateSpline 这样的面向对象的样条曲线有导数的方法。请注意,派生方法在 Scipy 0.13 中实现,在 0.12 中不存在。

请注意,正如@JosephCottham 在 2018 年的评论中指出的那样,这个答案(至少对 Numpy 1.08 有好处)不再适用,因为(至少)Numpy 1.14。检查您的版本号和调用的可用选项。

关于python - numpy 中的二阶梯度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23419193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com