python 生成 Toeplitz 矩阵
首先导入必要的依赖文件
import numpy as np
from scipy.linalg import toeplitz
明确要实现的功能
Toeplitz 矩阵定义:链接
给定一个单数项的数列,如
以中心项
为起点开始构造矩阵:
事实上,这是 Circulant 矩阵。在 Toeplize 的基础上,Circulant 进一步的要求是每一个行向量,是前一个行向量的循环右移一个元素。
通用代码
m = 4 # 中心项索引
N = 2 * m + 1 # 总共的项数
d = np.arange(1, N+1)
d2 = d[::-1]
t = toeplitz(d[m:], d2[m:])
print(t)
输出:
d = [1 2 3 4 5 6 7 8 9]
t =
[[5 4 3 2 1]
[6 5 4 3 2]
[7 6 5 4 3]
[8 7 6 5 4]
[9 8 7 6 5]]
[Finished in 0.5s]
写成函数
def gen_toeplitz(m, array):
'''
m: 中心项索引
array: 数列
'''
# N = 2 * m + 1 # 总共的项数
list2 = array[::-1] # 翻转
t_matrix = toeplitz(array[m:], list2[m:])
return t_matrix
太简单了,做个小笔记留存,以后万一用到。
调用一下,假设生成一个
的 Toeplitz 矩阵,即
。
if __name__ == '__main__':
m = 5-1
array = np.arange(2 * m + 1)
T_m = gen_toeplitz(m, array)
print(array)
print(T_m)