【问题标题】:How to find knee of curve in python?如何在python中找到曲线的膝盖?
【发布时间】:2021-08-22 23:15:10
【问题描述】:

我正在尝试找到一种方法来找到曲线的拐点,给定一组点,并找到 python 包膝盖,这似乎是完成工作的正确工具。这里的曲线“拐点”是指曲线中斜率急剧上升的点。我正在专门寻找发生这种情况的 x 轴上的值。虽然我在解释我的结果时遇到了一些问题,因为它们似乎不是我所期望的。

这是我想学习的跪式文档:https://kneed.readthedocs.io/en/stable/parameters.html

这是我尝试过的代码:

x = np.array([30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750])
y = np.array([1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,15,15,15,16,16,])
kneedle = KneeLocator(x, y, curve="convex", direction="increasing")
kneedle.knee

通过此代码,我正在创建具有 x 轴值和 y 轴值的数据。仅观察数据,我们可以看到 y 值的最大“跳跃”是从 2 到 15,在 x 轴上的 600 到 630 处可见。正如数据所表示的,曲线是凸的,数据在增加。我想这个代码会产生 600 或 630 作为膝盖。相反,此代码生成 750 作为拐点,这肯定不是曲线的拐点。

生成正确的膝盖值可能会出错?我将使用python。

【问题讨论】:

    标签: python curve


    【解决方案1】:

    我不太了解kneed,但问题可能是您的数据不是凸的?如果将 y 更改为

    ,会发生什么情况
    y = np.array([1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,15,150,1510,16000,160000,])
    

    所以它真的是凸的

    【讨论】:

    • 谢谢你的建议,我试了一下你的y轴np数组,它确实在x轴上产生了690作为膝盖,这绝对是它应该的,嗯...也许只是你的y轴数据更明显?我不确定。
    猜你喜欢
    • 2017-05-21
    • 2018-05-17
    • 2014-01-28
    • 1970-01-01
    • 2016-03-27
    • 2016-10-04
    • 2018-02-16
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多