首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于不均匀空间点的scipy.misc.derivative

用于不均匀空间点的scipy.misc.derivative
EN

Stack Overflow用户
提问于 2020-12-29 10:48:59
回答 1查看 69关注 0票数 1

我想计算一个点集中每个点(除了第一个和最后一个点)的二阶导数。该点集具有字典的数据类型,其类似于points = {x1:y1, x2:y2, ... xn:yn},其中所有的x都是正整数,但其间隔不均匀,例如,x1=1, x2=2, x3=3, x4=5, x5=7x数不是线性增加的,并且间隔可以是随机的,即,x_{i+1} - x_{i}可以是任何正整数。

对于这个点的字典,我想得到每个点的二阶导数,所以我进行了如下编码:

代码语言:javascript
复制
import numpy as np
from scipy.misc import derivative
def wrapper(x):
    return np.array([points[int(i)] for i in x])
y_d2 = derivative(wrapper, np.array(list(points.keys()))[1:-1], dx=1.0, n=2)

在本例中,我将在return np.array([points[int(i)] for i in x])上获取KeyError: 4。这是因为x=4在点字典中不存在,所以它有一个键错误。在这种情况下,我如何使用scipy.misc.derivative?如何设置scipy.misc.derivativedx参数(间距)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-30 07:23:46

你必须使用scipy.misc.derivative吗?因为计算二阶导数非常容易,不需要

假设你有一个字典形式的数据:

代码语言:javascript
复制
points = {1:2, 2:2, 4:4, 5:5}

然后,您所要做的就是首先将它们放入x,y列表:

代码语言:javascript
复制
x,y = list(points.keys()), list(points.values())

然后使用numpy diff计算导数

代码语言:javascript
复制
dy_dx = np.diff(y)/np.diff(x)
d2y_dx2 = np.diff(dy_dx)/np.diff(x[:-1])

d2y_dx2的输出为

代码语言:javascript
复制
array([1., 0.])

不出所料。

当然,如果你想使用更高精度的导数公式,还有更复杂的版本,例如,你可以从你的x,y创建一条样条曲线,并计算该样条曲线的导数。但我会从上面的基本方案开始,除非有其他令人信服的理由

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65486706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档