Меня попросили создать функцию mean_filter в одномерном массиве с заданным ядром, предполагая заполнение нулями.
Средний фильтр - это алгоритм, предназначенный для удаления шума. Он принимает массив, ядро (скажем, K) и заменяет каждое значение массива средним значением окружающих значений K, включая само себя.
Этот алгоритм используется при обработке изображений.
Я смог это сделать -
def mean_filter(arr, k):
# applies mean filter to 1-d array with the kernel size 2k+1 . Write your code here
p=len(arr)
arr2=np.zeros(2*k+p, dtype=float)
arr3=np.zeros(2*k+p, dtype=float)
arr4=np.zeros(p, dtype=float)
for i in range(p):
arr2[k+i]=arr[i]
for i in range(k,k+p):
sum=0
for j in range(-k,k+1):
sum+=arr2[i+j]
arr3[i]=sum/float(2*k+1)
for i in range(p):
arr4[i]=arr3[k+i]
return arr4
Но они ожидают от меня, что это можно сделать без какого-либо циклы.
Инструкция читает: " Эта задача должна быть выполнена без каких-либо циклов, пониманий или функций, таких как np.vectorize, et c.
Не используйте встроенные функции свертки для этой задачи"
Я буквально понятия не имею, как это сделать. Не могли бы вы предложить что-нибудь? Подсказки будут оценены.