Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- input:
- [(4,8),(6,10),(11,12),(15,20),(20,25)]
- output:
- [(4, 12), (15, 25)]
- input:
- ([(4,8),(6,10),(11,12),(15,20)])
- output:
- [(4, 12), (15, 20)]
- import numpy as np
- def simplify_intervals(intervals):
- # Make intervals into an array
- intervals = np.asarray(intervals)
- # Make array for zero to the greatest interval end
- r = np.arange(intervals[:, 1].max() + 1)[:, np.newaxis]
- # Check what elements of the array are within each interval
- m = (r >= intervals[:, 0]) & (r <= intervals[:, 1])
- # Collapse belonging test for each value
- ind = m.any(1).astype(np.int8)
- # Find where the belonging test changes
- d = np.diff(np.concatenate([[0], ind, [0]]))
- # Find interval bounds
- start = np.where(d > 0)[0]
- end = np.where(d < 0)[0] - 1
- # Make final intervals array
- return np.stack([start, end], axis=1)
- print(simplify_intervals([(4, 8), (6, 10), (11, 12), (15, 20), (20, 25)]))
- # [[ 4 12]
- # [15 25]]
- print(simplify_intervals(([(4,8),(6,10),(11,12),(15,20)])))
- # [[ 4 12]
- # [15 20]]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement