Я изучаю Python, и одно из упражнений из курса, который я беру, состоит в том, чтобы создать функцию, которая вычисляет скользящее среднее для всех элементов в векторе с учетом окна элементов. Единственные исключительные случаи - около краев, где не хватает соседей, тогда значение ребра должно быть повторено. Я написал следующую функцию, которая не работает:
%reset -f
def moving_window_average(x, n_neighbors):
mavg=[]
i=0
while i<=len(x):
sumv=[x[i]]
j = n_neighbors
while j>0:
if (i-j)<0:
sumv.append(x[i])
sumv.append(x[i+j])
j-=1
elif (i+j)>len(x):
sumv.append(x[i])
sumv.append(x[i-j])
j-=1
else:
sumv.append(x[i-j])
sumv.append(x[i+j])
j-=1
mavg_i=sum(sumv)/len(sumv)
mavg.append(mavg_i)
i+=1
return mavg
x = [0,10,5,3,1,5]
print(moving_window_average(x, 1))
Но когда я запускаю построчно, она работает (как показано ниже), она прекрасно работает для меня
mavg=[]
i=0
#while i<=len(x):
i<=len(x)
sumv=[x[i]]
j=1
#while j>0
j>0
#
(i-j)<0
sumv.append(x[i])
sumv.append(x[i+j])
j-=1
#
(i+j)>len(x)
sumv.append(x[i])
sumv.append(x[i-j])
j-=1
# else
sumv.append(x[i-j])
sumv.append(x[i+j])
j-=1
mavg_i=sum(sumv)/len(sumv)
mavg.append(mavg_i)
i+=1
Может кто-нибудь пожалуйста Помоги мне? Я считаю, что решение должно быть довольно простым, но я не могу понять, что не так в моей функции. Спасибо.