当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何以正确的形式生成Toeplitz矩阵以执行离散卷积?》经验,为你挑选了1个好方法。

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

在此输入图像描述

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

有没有办法在numpy的纯粹的基础上实现这一目标roll,hstack等,即不使用任何for循环?我尝试了各种各样的转变,但我不能真正把它变成上面显示的形式.



1> ali_m..:

是的,你可以使用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]])

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有