Search code examples
pythonarrayspython-2.7minima

Finding turning points of an Array in python


If I for example have an array:

A = (0,2,3,4,5,2,1,2,3,4,5,6,7,8,7,6,5,4,5,6)

It can be seen that there are 4 turning points. (at A[4],A[6], A[13], A[17])

How can I use python to return the number of turning points?

import numpy as np
import scipy.integrate as SP
import math

def turningpoints(A):
    print A
    N = 0
    delta = 0
    delta_prev = 0
    for i in range(1,19):
        delta = A[i-1]-A[i]       #Change between elements
        if delta < delta_prev:    #if change has gotten smaller
            N = N+1               #number of turning points increases
        delta_prev = delta        #set the change as the previous change
    return N

if __name__ == "__main__":
    A  = np.array([0,2,3,4,5,2,1,2,3,4,5,6,7,8,7,6,5,4,5,6])
    print turningpoints(A)

Currently, this system is flawed and certainly not very elegant. Any ideas?


Solution

  • You're overthinking it. A "turning point" is one that is either higher than the points on both sides, or lower.

    def turningpoints(x):
      N=0
      for i in range(1, len(x)-1):
         if ((x[i-1] < x[i] and x[i+1] < x[i]) 
             or (x[i-1] > x[i] and x[i+1] > x[i])):
           N += 1
      return N
    
    >>> turningpoints([0,2,3,4,5,2,1,2,3,4,5,6,7,8,7,6,5,4,5,6])
    4