Средний фильтр в python без петель - PullRequest
1 голос
/ 10 апреля 2020

Меня попросили создать функцию 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.

Не используйте встроенные функции свертки для этой задачи"

Я буквально понятия не имею, как это сделать. Не могли бы вы предложить что-нибудь? Подсказки будут оценены.

1 Ответ

0 голосов
/ 11 апреля 2020

Например:

import numpy as np
k=2
kern=np.ones(2*k+1)/(2*k+1)
arr=np.random.random((10))
out=np.convolve(arr,kern, mode='same')
...