【问题标题】:Convolving a vector with itself n times using Scipy without for loops使用没有 for 循环的 Scipy 将向量与自身卷积 n 次
【发布时间】:2020-02-01 18:08:30
【问题描述】:

我想在不使用 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

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

【问题讨论】:

  • 可能有。但如果有必要,我会感到惊讶——你是否做了这么多卷积,以至于浪费了大量时间?
  • 如果是这样,我认为可能有一种方法可以将多个卷积表示为傅里叶变换下的矩阵幂运算......

标签: python numpy scipy convolution


【解决方案1】:

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

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

【讨论】:

  • 啊,我明白了,这就是做多重卷积的动机吗?如果是这样,这是一个很好的答案。不过,对于 OP 的澄清会很好。
猜你喜欢
  • 1970-01-01
  • 2018-01-14
  • 2013-02-07
  • 2018-11-24
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 2013-01-23
  • 2012-03-06
相关资源
最近更新 更多