5

离散卷积可以通过 Toeplitz 矩阵执行,如下所示(Wiki 文章)

在此处输入图像描述

请注意,这与一般 Toeplitz 矩阵的形式并不完全相同,但它经历了各种移位和零填充。

有没有办法在 numpy 中实现这一点,纯粹基于等rollhstack即不使用任何for循环?我已经尝试了各种各样的转变,但我无法真正将它变成上面显示的形式。

4

1 回答 1

9

是的,您可以使用scipy.linalg.toeplitz

import numpy as np
from scipy import linalg

h = np.arange(1, 6)

padding = np.zeros(h.shape[0] - 1, h.dtype)
first_col = np.r_[h, padding]
first_row = np.r_[h[0], padding]

H = linalg.toeplitz(first_col, first_row)

print(repr(H))
# array([[1, 0, 0, 0, 0],
#        [2, 1, 0, 0, 0],
#        [3, 2, 1, 0, 0],
#        [4, 3, 2, 1, 0],
#        [5, 4, 3, 2, 1],
#        [0, 5, 4, 3, 2],
#        [0, 0, 5, 4, 3],
#        [0, 0, 0, 5, 4],
#        [0, 0, 0, 0, 5]])
于 2015-12-30T20:02:33.313 回答