python-如何查找和视觉标记序列的局部最小值?

如何用增加的局部极小值绘制点序列并用另一种颜色标记它们?与图片类似。我无法使用该顺序设置列表,并且最小值是错误的。还是有更简单的方法来做到这一点?

情节的例子

我尝试了这段代码:

import sys
from numpy import NaN, Inf, arange, isscalar, asarray, array
import random
import numpy as np
import matplotlib.pyplot as plt

def peakdet(v, delta, x = None):
    '''
    Converted from MATLAB script at http://billauer.co.il/peakdet.html
    Returns two arrays
    function [maxtab, mintab]=peakdet(v, delta, x)
    '''
    maxtab = []
    mintab = []

    if x is None:
        x = arange(len(v))  
    v = asarray(v)
    if len(v) != len(x):
        sys.exit('Input vectors v and x must have same length')
    if not isscalar(delta):
        sys.exit('Input argument delta must be a scalar')
    if delta <= 0:
        sys.exit('Input argument delta must be positive')

    mn, mx = Inf, -Inf
    mnpos, mxpos = NaN, NaN
    lookformax = True
    for i in arange(len(v)):
        this = v[i]
        if this > mx:
            mx = this
            mxpos = x[i]
        if this < mn:
            mn = this
            mnpos = x[i]
        if lookformax:
            if this < mx-delta:
                maxtab.append((mxpos, mx))
                mn = this
                mnpos = x[i]
                lookformax = False
        else:
            if this > mn+delta:
                mintab.append((mnpos, mn))
                mx = this
                mxpos = x[i]
                lookformax = True
    return array(maxtab), array(mintab)

if __name__=="__main__":
    from matplotlib.pyplot import plot, scatter, show
    series = [7,6,5,4,3,1,3,5,6,9,12,13,10,8,6,3,5,6,7,8,13,15,11,12,9,6,4,8,9,10,15,16,17,19,22,17,15,13,11,10,7,5,8,9,12]
    maxtab, mintab = peakdet(series,.3)
    y = np.linspace(0, 10, len(series))
    plt.plot(y, series, '-', color='black');
#    scatter(array(maxtab)[:,0], array(maxtab)[:,1], color='blue')
    scatter(array(mintab)[:,0], array(mintab)[:,1], color='red')
    show()

我得到这个数字:

结果图

杜布伯丹

尝试scipy.signal.find_peaks要找到最小值,请乘以series-1。

find_peaks返回峰或最小值的索引。为了获得正确的绘图位置,您必须索引xseries使用的输出find_peaks

如果您担心单个信号包含极小值递减的序列,则可以使用来比较连续峰的幅度np.diff

import matplotlib.pyplot as plt
from scipy.signal import find_peaks
import numpy as np

series = np.array([7,6,5,4,3,1,3,5,6,9,12,13,10,8,6,3,5,6,7,8,13,15,11,12,9,6,4,8,9,10,15,16,17,19,22,17,15,13,11,10,7,5,8,9,12])
peaks, _ = find_peaks(series)
mins, _ =find_peaks(series*-1)
x = np.linspace(0, 10, len(series))
plt.plot(x, series, color='black');
plt.plot(x[mins], series[mins], 'x', label='mins')
plt.plot(x[peaks], series[peaks], '*', label='peaks')
plt.legend()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Python DataFrame中查找最小值列和最小值列名称

元组对,使用python查找最小值

查找python数据数组的最小值

在python中找到两个局部最小值

Python数据框连续查找最小值和最大值之间的差异

在python中查找三列的最大值和最小值

在Python的列表模式中查找最小值和最大值

在没有列表的python中查找最大值和最小值

在python中的字典(JSON)中查找最大值和最小值

使用迭代查找最大值和最小值时的Python TypeError

在python中查找变化集的最小值和最大值的有效方法

Python递归-在嵌套数组中查找最大值和最小值之和

在元组python中查找字典中的最大值和最小值

使用递归和无循环查找嵌套列表python的最小值

在Python中查找列表的最小值,最大值

如何按天对日期进行分组并在 Pandas 数据框或 python 中查找最小值和最大值

如何使用 python pandas 找到 ID 1 和 5 的最小值和最大值?

如何从Python-3的DataFrame中查找前N个最小值

在 Python 中查找列表中的最小值时如何从无限值开始?

在在O词典查找最小值(1)的时间的Python

Python:在嵌套字典中查找最小值

在Python数组中连续查找最小值索引

使用python查找数组簇中的最小值

python迭代查找字典中的最小值

在 Python 中查找圖的最小值的坐標

如何在 Python 中找到二维数组的最小值和最大值

如何从python中的boxplot获取最小值和最大值?

如何在python中找到掷骰子程序的最小值和最大值

在 Python 中,如何使用正确的最小值和最大值索引周的名称?