python 生成 Toeplitz 矩阵

python 生成 Toeplitz 矩阵


首先导入必要的依赖文件

import numpy as np
from scipy.linalg import toeplitz

明确要实现的功能

Toeplitz 矩阵定义:链接
给定一个单数项的数列,如 [ 2 1 0 1 2. ] \left[-2,-1,0,1,2.\right]
以中心项 0 0 为起点开始构造矩阵:
[ 0 1 2 1 0 1 2 1 0 ] \begin{bmatrix} 0&-1&-2 \\ 1&0&-1 \\ 2&1&0 \end{bmatrix}
事实上,这是 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 

太简单了,做个小笔记留存,以后万一用到。
调用一下,假设生成一个 5 × 5 5\times 5 的 Toeplitz 矩阵,即 m + 1 = 5 m+1=5

if __name__ == '__main__':
	m = 5-1
	array = np.arange(2 * m + 1)
	T_m = gen_toeplitz(m, array)
	print(array)
	print(T_m)

猜你喜欢

转载自blog.csdn.net/qq_23947237/article/details/84591292