Finding local maxima/minima with Numpy in a 1D numpy array

后端 未结 12 1825
迷失自我
迷失自我 2020-11-22 15:13

Can you suggest a module function from numpy/scipy that can find local maxima/minima in a 1D numpy array? Obviously the simplest approach ever is to have a look at the neare

12条回答
  •  误落风尘
    2020-11-22 15:48

    Update: I wasn't happy with gradient so I found it more reliable to use numpy.diff. Please let me know if it does what you want.

    Regarding the issue of noise, the mathematical problem is to locate maxima/minima if we want to look at noise we can use something like convolve which was mentioned earlier.

    import numpy as np
    from matplotlib import pyplot
    
    a=np.array([10.3,2,0.9,4,5,6,7,34,2,5,25,3,-26,-20,-29],dtype=np.float)
    
    gradients=np.diff(a)
    print gradients
    
    
    maxima_num=0
    minima_num=0
    max_locations=[]
    min_locations=[]
    count=0
    for i in gradients[:-1]:
            count+=1
    
        if ((cmp(i,0)>0) & (cmp(gradients[count],0)<0) & (i != gradients[count])):
            maxima_num+=1
            max_locations.append(count)     
    
        if ((cmp(i,0)<0) & (cmp(gradients[count],0)>0) & (i != gradients[count])):
            minima_num+=1
            min_locations.append(count)
    
    
    turning_points = {'maxima_number':maxima_num,'minima_number':minima_num,'maxima_locations':max_locations,'minima_locations':min_locations}  
    
    print turning_points
    
    pyplot.plot(a)
    pyplot.show()
    

提交回复
热议问题