如果函数的 x 和 y 值给出为 np.array,如何找到所有最大值

How to find all maximas if x and y values of the function are given as np.array

我有两个 numpy 数组 x 和 y,我用这些值绘制了一条曲线。现在我想找到该曲线上存在局部最大值的所有 x 值。将如何完成?

请给出一种方法,用这些 x 和 y 值以及存在局部最大值的 x 值(或数组 x 中 x 值的索引)拟合最佳可能曲线。

我为下面的一个简单示例添加了代码,该示例找到数组的所有局部最小值和所有局部最大值并将它们分别存储在 minValmaxVal 中。请注意:当您将其应用于大型数据集时,请务必先平滑信号;否则你最终会陷入绝境。

数据如下;计算出的 minima/maxima 分别为 [2, 5, 7][1, 3, 6]

代码如下:

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

X=np.arange(9)
Y=np.array([ 3,  5,  1,  9,  3,  2, 10,  7,  8])
plt.plot(X,Y)
plt.show()
maxVal = argrelextrema(Y, np.greater) #(array([1, 3, 6]),)
minVal = argrelextrema(Y, np.less) #(array([2, 5, 7]),)
x=np.array([6,3,5,2,1,4,9,7,8])
y=np.array([2,1,3,5,7,9,8,10,7])

sort_idx = np.argsort(x)
y=y[sort_idx]
x=x[sort_idx]
minm=np.array([],dtype=int)
maxm=np.array([],dtype=int)
length = y.size
i=0

while i < length-1:
    if i < length - 1:
        while i < length-1 and y[i+1] >= y[i]:
            i+=1

        if i != 0 and i < length-1:
            maxm = np.append(maxm,i)

        i+=1

    if i < length - 1:
        while i < length-1 and y[i+1] <= y[i]:
            i+=1

        if i < length-1:
            minm = np.append(minm,i)
        i+=1


print minm,maxm

数组最小值和最大值分别包含最小值和最大值的索引...