x是一个list,图形的纵坐标是x中的值,横坐标是自然数,用plt函数画出来,假设图形如下,我想找到这个图形中所有阶段低点(类似连续函数里的拐点):a,b点。不知道如何实现。Help me
补充:不是求整个列表的最低点,是找阶段的阶段低点,阶段不确定的。在图形上能看到

python找到list中的最低点
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注
题主的意思就是找到曲线上的全部驻点,也就是导数为0点。如果题主的数据可以通过回归算法找到函数表达式,则可以通过求导找出所有的驻点;如果数据不能或者难以通过回归算法找打函数表达式,也可以通过比较相邻数据点的增量找到驻点。下面的代码,用一组正弦数据演示了这个方法。
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> x = np.linspace(0,8*np.pi,100) # 在4个周期内等间隔取100个点 >>> y = np.sin(x) # 生成正弦曲线上100个点的值 >>> plt.plot(x,y) # 曲线如下图所示 [<matplotlib.lines.Line2D object at 0x0000020702BD0D08>] >>> plt.show() >>> d = np.absolute(np.diff(y)) # 相邻点取差的绝对值 >>> i = np.argsort(d) # 索引序号排序 >>> x[i[:8]] # 4个周期有8个驻点 array([ 4.56958931, 20.30928584, 10.91624114, 13.96263402, 1.52319644, 23.35567872, 17.26289297, 7.61598219]) >>> y[i[:8]] # 如果只需要导数从负变正的驻点,那就遍历这8个点,比较其前后值即可 array([-0.98982144, 0.99383846, -0.99685478, 0.98480775, 0.99886734, -0.97880245, -0.99987413, 0.97181157])
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报