TheDeanVanGreunen

a.py

Nov 24th, 2019
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.76 KB | None | 0 0
  1. import numpy as np
  2. from scipy.signal import argrelextrema
  3. import matplotlib.pyplot as plt
  4. import timeit
  5. import time
  6.  
  7.  
  8. if __name__ == '__main__':
  9.     start_time = time.time()
  10.     N, T, D = 1000000, 4, 4
  11.     x = np.random.uniform(low=-1, high=1, size=N)
  12.     x, index = np.cumsum(x), []
  13.  
  14.     mins, maxs = argrelextrema(x, np.less)[0], argrelextrema(x, np.greater)[0]
  15.     min_elem = mins[0]
  16.     index.append(min_elem)
  17.  
  18.     assert index[0] in mins
  19.  
  20.     for max_elem in maxs:
  21.         if x[max_elem] - x[min_elem] >= D and max_elem - min_elem >= T:
  22.             min_elem = np.argmin(x[min_elem:max_elem])+min_elem
  23.             index[-1] = min_elem
  24.             index.append(max_elem)
  25.  
  26.             assert index[-1] in maxs, 'index[-1] not in maxs'
  27.             assert max_elem - min_elem >= T, '(max_elem - min_elem) is less than T'
  28.             assert x[max_elem] - x[min_elem] >= D, '(x[max_elem] - x[min_elem]) is less than D'
  29.             assert np.all(np.logical_and(x[min_elem+1:max_elem] >= x[min_elem],
  30.                                          x[min_elem+1:max_elem] <= x[max_elem])), 'Issue with np.all'
  31.            
  32.  
  33.             for min_elem in mins:
  34.                 if x[max_elem] - x[min_elem] >= D and min_elem - max_elem >= T:
  35.                     max_elem = np.argmax(x[max_elem:min_elem]) + max_elem
  36.  
  37.                     index[-1] = max_elem
  38.                     index.append(min_elem)
  39.  
  40.                     assert index[-1] in mins, 'index[-1] not in mins'
  41.                     assert min_elem - max_elem >= T, '(max_elem - min_elem) is less than T'
  42.                     assert x[max_elem] - x[min_elem] >= D, '(x[max_elem] - x[min_elem]) is less than D'
  43.                     break
  44.  
  45.     elapsed_time = time.time() - start_time
  46.     print('ELPS-Time', elapsed_time)
Advertisement
Add Comment
Please, Sign In to add comment