Свернуть вектор с собой n раз, используя Scipy без циклов for - PullRequest
0 голосов
/ 01 февраля 2020

Я хочу свернуть вектор с собой n раз, не используя a для l oop (я новичок в numpy). Прямо сейчас у меня есть это:

def build_gaussian_filter(filter_size):
    ones_array = np.array([1, 1])
    result = np.array([1, 1])
    for i in range(filter_size-2):
        result = np.convolve(ones_array, result)
    return result

Есть ли способ numpy сделать это без циклов? Спасибо

1 Ответ

0 голосов
/ 02 февраля 2020

Вы можете использовать встроенные оконные функции:

scipy.signal.windows.gaussian(5,1) * 6
>>> array([0.8120117 , 3.63918396, 6.        , 3.63918396, 0.8120117 ])

Дает почти такой же результат вашей функции:

build_gaussian_filter(5)
>>> [1 4 6 4 1]

Хотя это кажется случайностью, как с При увеличении размеров окна ваши результаты расходятся с ядром, возвращаемым Scipy. Вы также можете посмотреть на обобщенное гауссовское окно в scipy.

...