python生成Toeplitz行列

6694 ワード

python生成Toeplitz行列
まず必要な依存ファイルをインポート
import numpy as np
from scipy.linalg import toeplitz

実装する機能を明確にする
Toeplitz行列定義:[−2,−1,0,1,2.]のような所定の単数項の数列をリンクする.\left[-2,-1,0,1,2.\right] [−2,−1,0,1,2.] 中心項0 0 0 0を起点として行列の構築を開始する:[0−1−2 1 0−1 2 2 2 1 0]begin{bmatrix}0&−1&−2\1&0−1&1&0end{bmatrix}⎣012−101−2−10⎦⎤事実上、これはCirculant行列である.Toeplizeに基づいて、Circulantのさらなる要件は、各ローベクトルであり、前のローベクトルのサイクルが1つの要素を右にシフトすることである.
汎用コード
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 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)