6

目前我有两个 numpy 数组:x并且y大小相同。

我想编写一个函数(如果存在,可能调用 numpy/scipy... 函数):

def derivative(x, y, n = 1):
    # something
    return result

其中是result一个x与_ _ _nyxy

4

3 回答 3

6

这不是一个简单的问题,但是已经设计了很多方法来处理它。一种简单的解决方案是使用有限差分法。命令numpy.diff()使用有限差分,您可以在其中指定导数的顺序。

维基百科还有一个页面,列出了不同精度的不同导数所需的有限差分系数。如果 numpy 函数不符合您的要求。

根据您的应用程序,您还可以使用scipy.fftpack.diff,它使用完全不同的技术来做同样的事情。尽管您的函数需要定义明确的傅立叶变换。

上述两个想法都有很多很多变体(例如,按部分求和,有限差分运算符或旨在保留方程组中已知演化常数的运算符)。你应该做什么在很大程度上取决于你试图解决的问题是什么。

好消息是在这个领域已经做了很多工作。数值微分的维基百科页面有一些资源(尽管它专注于有限差分技术)。

于 2013-11-18T10:01:27.580 回答
1

findiff项目是一个 Python 包,它可以以任何所需的精度顺序(当然取决于您的硬件限制)对任何维度的数组进行衍生。它可以处理均匀和非均匀网格上的数组,还可以创建导数的推广,即具有常数和可变系数的偏导数的一般线性组合。

于 2018-04-02T17:59:17.937 回答
0

这样的事情会解决你的问题吗?

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

于 2019-09-10T20:09:00.837 回答