python - 如何生成正确形式的 Toeplitz 矩阵以执行离散卷积?

标签 python numpy linear-algebra convolution toeplitz

离散卷积可以通过Toeplitz矩阵进行,如下图(Wiki article) :

enter image description here

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

有没有办法在 numpy 中完全基于 rollhstack 等来实现这一点,即不使用任何 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]])

关于python - 如何生成正确形式的 Toeplitz 矩阵以执行离散卷积?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536264/

相关文章:

python - 将映射函数应用到 ndarray 的每个成员,并以索引作为参数

c++ - 如何实现 Matlab 的 mldivide(又名反斜杠运算符 "\")

arrays - 判断n个整数数组中是否存在A+B=C

python - 正则表达式解析 python 中的导入语句

python - 在代码中处理大数字

python - Spotipy 身份验证不返回 token ?

python - 从没有标题的 CSV 中在 Pandas 中绘制图表

python - 如何使 Numba 访问数组的速度与 Numpy 一样快?

python - 从python中的另一个类访问自己

c++ - 对从 Eigen 获得的特征值和特征向量进行排序的有效方法