Source code for pypeit.move_median.mmpy

from collections import deque
from bisect import insort, bisect_left
import itertools

[docs]def move_median(seq_pad, window_size): """ Code contributed by Peter Otten, made to be consistent with scipy.ndimage.filters.median_filter by Joe Hennawi. See discussion at: http://groups.google.com/group/comp.lang.python/browse_thread/thread/d0e011c87174c2d0 """ odd = (window_size % 2) == 1 seq_pad = iter(seq_pad) d = deque() s = [] result = [] for item in itertools.islice(seq_pad, window_size): d.append(item) insort(s, item) result.append(s[len(d)//2] if odd else (s[len(d)//2] + s[len(d)//2 - 1])/2) m = window_size // 2 for item in seq_pad: old = d.popleft() d.append(item) del s[bisect_left(s, old)] insort(s, item) result.append(s[m] if odd else (s[m] + s[m-1])/2) return result