python中数组的派生?

2024-04-29 14:14:24 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我有两个numpy数组:相同大小的xy

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

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

其中result是相同大小的x的numpy数组,包含xny个与x有关的y导数的值(我希望使用y的多个值对该导数求值,以避免不平滑的结果)。


Tags: 函数功能numpyreturndefscipy数组result
3条回答

findiff project是一个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

这不是一个简单的问题,但是已经设计了很多方法来处理它。一个简单的解决方案是使用finite difference方法。命令“numpy.diff”使用有限差分,可以指定导数的顺序。维基百科还有一个页面,列出了不同精确性的不同衍生物所需的finite differencing coefficients。如果numpy函数做不到您想要的。

根据应用程序的不同,您还可以使用scipy.fftpack.diff,它使用completely different technique来执行相同的操作。尽管你的函数需要一个定义良好的傅立叶变换。

在上述两种思想中,有很多很多变体(例如summation by parts有限差分算子或旨在保留方程组中已知演化常数的算子)。你应该做什么在很大程度上取决于你想解决的问题是什么。

好在这方面做了很多工作。用于Numerical Differentiation的Wikipedia页面有一些资源(尽管它主要关注有限差分技术)。

相关问题 更多 >