首页 > 解决方案 > 使用没有 for 循环的 Scipy 将向量与自身卷积 n 次

问题描述

我想在不使用 for 循环的情况下将向量与自身卷积 n 次(我是 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

有没有一种无循环的方法来做到这一点?谢谢

标签: pythonnumpyscipyconvolution

解决方案


您可以使用内置的窗口函数:

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 中的广义高斯窗口。


推荐阅读