【问题标题】:2d convolution gives not the desired output2d 卷积没有给出所需的输出
【发布时间】:2020-06-24 13:09:08
【问题描述】:

我想像在 1D 中一样使用 2D 卷积。不幸的是,前一种情况下的输出没有所需的形状。让n = 5,然后

h_0 = (1 / 4) * np.array([1, 2, 1])
x = np.random.rand(n)
np.convolve(h_0, x, 'same')

>>> array([0.65498075, 0.72729356, 0.51417706, 0.34597679, 0.1793755])

但是

h_00 = np.kron(h_0, h_0)
h_00 = np.reshape(h_00, (3, 3))
x = np.random.rand(n, n)
scipy.signal.convolve2d(h_00, x, 'same', boundary='symm')

>>> array([[1.90147294, 1.6541233 , 1.82704077],
           [1.55228912, 1.3641027 , 1.55536069],
           [1.61190909, 1.45159935, 1.58266083]])

我本来希望有一个(5, 5) 输出数组。

【问题讨论】:

  • a 的大小为 5 - 输出 5; h_00 的形状为 (3, 3) 输出的形状为 (3, 3)。一切似乎都合理?
  • @V.Ayrat 我希望输出取决于x 的大小(形状)。

标签: python arrays numpy scipy convolution


【解决方案1】:

scipy.signal.convolve2d 的文档明确说明了 mode 参数

模式
...
same
输出与 in1 大小相同,以“完整”输出为中心。

因此,假设您首先传递内核,您的输出将与内核大小相同,而不是您要过滤的数组。要解决此问题,请交换前两个输入:

scipy.signal.convolve2d(x, h_00, 'same', boundary='symm')

混淆可能来自numpy.convolve 的行为,它执行以下操作:

模式:{‘full’, ‘valid’, ‘same’}, optional
...
‘相同’:
模式“相同”返回长度为 max(M, N) 的输出。边界效应仍然可见。

Numpy 将较大的数组解释为内核,而不管参数顺序如何。这是可能的,因为只有一个维度,总有一个明确的赢家。

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 2017-05-20
    • 2021-05-12
    • 2018-10-19
    • 1970-01-01
    • 2018-12-14
    • 2017-07-03
    • 1970-01-01
    • 2013-01-28
    相关资源
    最近更新 更多