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

时间:2015-06-25 07:23:53

标签: python arrays numpy curve-fitting derivative

我有两个numpy数组x和y,我用这些值绘制了曲线。现在我想找到x的所有值,其中局部最大值存在于该曲线上。怎么做?

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

2 个答案:

答案 0 :(得分:0)

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

数据如下;计算出的最小值/最大值分别为[2, 5, 7][1, 3, 6]

enter image description here

以下是代码:

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]),)

答案 1 :(得分:0)

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

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