在numpy 1d阵列中查找拐点和固定点

时间:2015-01-22 15:21:46

标签: python arrays numpy

让我们假设我有以下numpy数组:

import numpy as np
import matplotlib.pyplot as plt
x = np.array([11.53333333, 11.86666667, 11.1, 10.66666667, 11.2, 11.3,
              11.06666667, 12.06666667, 11.8, 13.03333333, 12.4,
              12.33333333, 12.53333333, 13.33333333, 12.43333333, 13., 13.2,
              13.76666667, 14.96666667, 19.16666667, 25.1, 32.,
              83.33333333, 103.76666667, 110.7, 118.63333333, 129.26666667,
              139.06666667, 150.3, 161.53333333, 171.16666667, 184.56666667,
              196.6, 210.26666667, 221.63333333, 231.3, 244.16666667,
              253.5, 254.66666667, 255., 255., 255., 255.,
              255., 255., 255., 255., 255., 255.,
              255., 255., 255., 255., 255., 255.,
              255., 255., 255., 255., 255.])

plt.plot(x)
plt.show()

这是绘制的输出:

plotted x

如何轻松获得此图表中的转折点?例如,第一个转折点是x = 20处的圆形,另一个处于 X = 37。

是否可以按降序获得所有转折点,以便我可以获得3个最有意义的转折点?


更新 我有兴趣获得Inflection Points以及Stationary points。在numpy / scipy中有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:1)

有许多可能的答案 - 取决于你真正想要的。一种想法是通过采用移动平均线或样条曲线等来平滑数据,然后采用二阶导数并查找何时更改符号。这将找到近似的“拐点”或“拐点” - 从字面上看,它会在凹陷发生变化时找到。

请参阅:

答案 1 :(得分:1)

我也在寻找这个答案。这是在python中找到拐点的一种方法:

How to find the inflection point in a noisy curve?

拐点为[x0,y0]

if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.
    define(['jquery'], factory);
}

Example output of how to find inflection point in python