Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from scipy.signal import argrelextrema
- import matplotlib.pyplot as plt
- import timeit
- import time
- if __name__ == '__main__':
- start_time = time.time()
- N, T, D = 1000000, 4, 4
- x = np.random.uniform(low=-1, high=1, size=N)
- x, index = np.cumsum(x), []
- mins, maxs = argrelextrema(x, np.less)[0], argrelextrema(x, np.greater)[0]
- min_elem = mins[0]
- index.append(min_elem)
- assert index[0] in mins
- for max_elem in maxs:
- if x[max_elem] - x[min_elem] >= D and max_elem - min_elem >= T:
- min_elem = np.argmin(x[min_elem:max_elem])+min_elem
- index[-1] = min_elem
- index.append(max_elem)
- assert index[-1] in maxs, 'index[-1] not in maxs'
- assert max_elem - min_elem >= T, '(max_elem - min_elem) is less than T'
- assert x[max_elem] - x[min_elem] >= D, '(x[max_elem] - x[min_elem]) is less than D'
- assert np.all(np.logical_and(x[min_elem+1:max_elem] >= x[min_elem],
- x[min_elem+1:max_elem] <= x[max_elem])), 'Issue with np.all'
- for min_elem in mins:
- if x[max_elem] - x[min_elem] >= D and min_elem - max_elem >= T:
- max_elem = np.argmax(x[max_elem:min_elem]) + max_elem
- index[-1] = max_elem
- index.append(min_elem)
- assert index[-1] in mins, 'index[-1] not in mins'
- assert min_elem - max_elem >= T, '(max_elem - min_elem) is less than T'
- assert x[max_elem] - x[min_elem] >= D, '(x[max_elem] - x[min_elem]) is less than D'
- break
- elapsed_time = time.time() - start_time
- print('ELPS-Time', elapsed_time)
Advertisement
Add Comment
Please, Sign In to add comment