可以通过Toeplitz矩阵执行离散卷积,如下所示(Wiki文章):
请注意,这与一般Toeplitz矩阵的形式不完全相同,但它经历了各种移位和零填充.
有没有办法在numpy的纯粹的基础上实现这一目标roll
,hstack
等,即不使用任何for
循环?我尝试了各种各样的转变,但我不能真正把它变成上面显示的形式.
是的,你可以使用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]])