1. np.roll
- 作用是将张量的元素进行移位,大小不变。根据此可以求创建循环矩阵
- 创建一个循环矩阵并求得其特征值和特征向量
import numpy as np
np.set_printoptions(suppress=True, precision=3)
class Eigenvalue():
def __init__(self, array):
self.array = array
self.value, self.vector = np.linalg.eig(self.array)
def __str__(self):
return f"array:\n{self.array}:\n eigenvalue:\n{self.value}\n,eigenveotr:\n{self.vector}"
class Circulant_Matrix():
def __init__(self, array):
self.array = array
def circulant(self):
N = np.size(self.array)
CM = np.array([np.roll(self.array, i) for i in range(N)])
my_cir = Eigenvalue(CM)
print(my_cir)
if __name__ == "__main__":
run_code = 0
N = 5
a = np.arange(4)
a_cm = Circulant_Matrix(a)
a_cm.circulant()
2. 运行结果:
array:
[[0 1 2 3]
[3 0 1 2]
[2 3 0 1]
[1 2 3 0]]:
eigenvalue:
[ 6.+0.j -2.+2.j -2.-2.j -2.+0.j]
,eigenveotr:
[[ 0.5+0.j -0. +0.5j -0. -0.5j -0.5+0.j ]
[ 0.5+0.j 0.5+0.j 0.5-0.j 0.5+0.j ]
[ 0.5+0.j 0. -0.5j 0. +0.5j -0.5+0.j ]
[ 0.5+0.j -0.5-0.j -0.5+0.j 0.5+0.j ]]