【问题标题】:Python Finding local maxima and minima on discrete data [duplicate]Python在离散数据上查找局部最大值和最小值[重复]
【发布时间】:2021-11-06 13:24:04
【问题描述】:

假设这条线由 pandas 中的离散随机数组成。如何找到 A、B、C、D 点?

A是第一个点和C之间的最高点

C是A和B之间的最低点

B是C和D之间的最高点

另一个例子可能是这样的

您可以使用这些数据来测试: [1, 2, 3, 10, 13, 15, 20, 50, 49, 49, 32, 33, 35, 36, 35, 34, 33, 34, 35, 36, 30, 27, 22, 15, 15 , 17, 20, 27, 30, 32, 50, 56, 67, 85, 100, 99, 94, 83, 72, 59, 66, 67, 89, 90, 92, 127, 130, 189]

以上数据:

A = 50

B = 100

C = 15

D = 59

【问题讨论】:

    标签: python pandas algorithm finance algorithmic-trading


    【解决方案1】:

    如果您确定这条线是连续的(不一定是平滑的),您可以通过使用有限差分来使用离散梯度搜索。

    如果您从 A 的左侧开始,您可以计算 (y[i+1]-y[i])(我省略了除以 h,因为它与此目的无关。)只需检查是否为正。如果是,请继续前进并再次计算。其实直接写会更方便。

    def find_a():
        i=toTheLeftOfA
        done=false
        while not done:
            if y[i-1]-y[i]>0:
                i=i+1
            else:
                done=true
        return([i,y[i]])
    ## retrieve [X,Y(X)=A] as find_a()
    
    

    我相信还有更聪明的东西,比如二分搜索。但只要你只需要做一次而不是每小时一百万次,这应该可以工作。

    【讨论】:

    • 不是连续的,不过谢谢
    • 当然对。我的意思是没有曲线存储为向量是“连续的”。但是,如果它对于长时间的延伸是单调的,并且这些延伸被您的兴趣点划分,那么这本质上就是图书馆在逻辑上所说的。如果曲线对于长时间的拉伸不是单调的,那么您描述的点可能很丰富并且不是很有趣。
    猜你喜欢
    • 2023-01-05
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多