Как я могу сгенерировать матрицу теплица в правильной форме для выполнения дискретной свертки?
Дискретная свертка может быть выполнена с помощью матрицы теплица, как показано ниже (Статья Wiki):
Обратите внимание, что это не та же самая форма, что и общая Матрица теплица, но она испытала различные сдвиги и нуль-дополнения.Есть ли способ, чтобы достичь этого в пакете numpy основывается исключительно на roll
, hstack
и т. д., то есть без использования каких-либо for
петель? Я пробовал все виды сдвигов, но я не могу действительно получить его в форме показано выше.
1 ответ:
Да, вы можете использовать
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]])