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] [21012.]
以中心项 0 0 0 为起点开始构造矩阵:
[ 0 − 1 − 2 1 0 − 1 2 1 0 ] \begin{bmatrix} 0&-1&-2 \\ 1&0&-1 \\ 2&1&0 \end{bmatrix} 012101210
事实上,这是 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 5×5 的 Toeplitz 矩阵,即 m + 1 = 5 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)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值