scipy.misc.derivative 不均匀 space 点
scipy.misc.derivative for uneven space points
我想计算点集中每个点(除了第一个和最后一个)的二阶导数。这个点集有一个字典的数据类型,就像 points = {x1:y1, x2:y2, ... xn:yn}
其中所有 x
都是正整数但是它的间距不均匀,例如 x1=1, x2=2, x3=3, x4=5, x5=7
x
数字不是线性增加的,差距可以是随机的,即 x_{i+1} - x_{i}
可以是任何正整数。
对于这个点字典,我想得到每个点的二阶导数,所以我做了这样的编码:
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.derivative
设置dx
参数(间距)?
一定要用scipy.misc.derivative吗?因为在没有
的情况下计算二阶导数非常容易
假设您的数据是一本字典:
points = {1:2, 2:2, 4:4, 5:5}
然后您要做的就是首先将它们放入 x,y 列表中:
x,y = list(points.keys()), list(points.values())
然后使用 numpy diff
计算导数
dy_dx = np.diff(y)/np.diff(x)
d2y_dx2 = np.diff(dy_dx)/np.diff(x[:-1])
d2y_dx2
的输出是
array([1., 0.])
符合预期。
当然,如果您想对导数使用更高精度的公式,还有更复杂的版本,例如,您可以从 x,y 创建样条曲线并计算样条曲线的导数。但我会从上面的基本方案开始,除非有其他令人信服的理由
我想计算点集中每个点(除了第一个和最后一个)的二阶导数。这个点集有一个字典的数据类型,就像 points = {x1:y1, x2:y2, ... xn:yn}
其中所有 x
都是正整数但是它的间距不均匀,例如 x1=1, x2=2, x3=3, x4=5, x5=7
x
数字不是线性增加的,差距可以是随机的,即 x_{i+1} - x_{i}
可以是任何正整数。
对于这个点字典,我想得到每个点的二阶导数,所以我做了这样的编码:
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.derivative
设置dx
参数(间距)?
一定要用scipy.misc.derivative吗?因为在没有
的情况下计算二阶导数非常容易假设您的数据是一本字典:
points = {1:2, 2:2, 4:4, 5:5}
然后您要做的就是首先将它们放入 x,y 列表中:
x,y = list(points.keys()), list(points.values())
然后使用 numpy diff
计算导数dy_dx = np.diff(y)/np.diff(x)
d2y_dx2 = np.diff(dy_dx)/np.diff(x[:-1])
d2y_dx2
的输出是
array([1., 0.])
符合预期。
当然,如果您想对导数使用更高精度的公式,还有更复杂的版本,例如,您可以从 x,y 创建样条曲线并计算样条曲线的导数。但我会从上面的基本方案开始,除非有其他令人信服的理由