目前我有两个 numpy 数组:x
并且y
大小相同。
我想编写一个函数(如果存在,可能调用 numpy/scipy... 函数):
def derivative(x, y, n = 1):
# something
return result
其中是result
一个x
与_ _ _n
y
x
y
目前我有两个 numpy 数组:x
并且y
大小相同。
我想编写一个函数(如果存在,可能调用 numpy/scipy... 函数):
def derivative(x, y, n = 1):
# something
return result
其中是result
一个x
与_ _ _n
y
x
y
这不是一个简单的问题,但是已经设计了很多方法来处理它。一种简单的解决方案是使用有限差分法。命令numpy.diff()使用有限差分,您可以在其中指定导数的顺序。
维基百科还有一个页面,列出了不同精度的不同导数所需的有限差分系数。如果 numpy 函数不符合您的要求。
根据您的应用程序,您还可以使用scipy.fftpack.diff,它使用完全不同的技术来做同样的事情。尽管您的函数需要定义明确的傅立叶变换。
上述两个想法都有很多很多变体(例如,按部分求和,有限差分运算符或旨在保留方程组中已知演化常数的运算符)。你应该做什么在很大程度上取决于你试图解决的问题是什么。
好消息是在这个领域已经做了很多工作。数值微分的维基百科页面有一些资源(尽管它专注于有限差分技术)。
findiff项目是一个 Python 包,它可以以任何所需的精度顺序(当然取决于您的硬件限制)对任何维度的数组进行衍生。它可以处理均匀和非均匀网格上的数组,还可以创建导数的推广,即具有常数和可变系数的偏导数的一般线性组合。
这样的事情会解决你的问题吗?
def get_inflection_points(arr, n=1):
"""
returns inflextion points from array
arr: array
n: n-th discrete difference
"""
inflections = []
dx = 0
for i, x in enumerate(np.diff(arr, n)):
if x >= dx and i > 0:
inflections.append(i*n)
dx = x
return inflections