Я позаимствовал некоторый код, чтобы вычислить текущую медиану массива. Но для каждого работающего массива я хочу исключить нулевые значения. Ниже приведен код:бегущая срединная, исключая нули
def RunningMedian(seq, M):
seq = iter(seq)
s = []
m = M // 2
# Set up list s (to be sorted) and load deque with first window of seq
s = [item for item in islice(seq,M)]
d = deque(s)
# Simple lambda function to handle even/odd window sizes
median = lambda : s[m] if bool(M&1) else (s[m-1]+s[m])*0.5
# Sort it in increasing order and extract the median ("center" of the sorted window)
s.sort()
# remove zeros from the array
s = np.trim_zeros(s)
print s
medians = [median()]
for item in seq:
old = d.popleft() # pop oldest from left
d.append(item) # push newest in from right
del s[bisect_left(s, old)] # locate insertion point and then remove old
insort(s, item) # insert newest such that new sort is not required
s = np.trim_zeros(s)
print s
medians.append(median())
return medians
Я тестирую код, но это не удалось. Мой пример: a = np.array([5 2 0 9 4 2 6 8])
, я назвал эту функцию RunningMedian(a,3)
. Что я хочу для каждой рабочей коробки: [2,5] [2,9] [4,9] [2,4,9] [2,4,6] [2,6,8 ]
Однако, после того, как я назвал выше функцию, она дает: [2, 5] [2, 9] [4, 9] [2, 9] [2, 6] [2 , 8]
И также возвращает неправильные медианные значения. Возвращаемая медиана от вызова: [5, 9, 9, 9, 6, 8]
.
Кто-нибудь может помочь мне исправить эту проблему? Спасибо.
Охота на импорт всегда отличная ... –