1. np.roll
- 作用是将张量的元素进行移位,大小不变。根据此可以求创建循环矩阵
- 创建一个循环矩阵并求得其特征值和特征向量
import numpy as npnp.set_printoptions(suppress=True, precision=3)class Eigenvalue():def __init__(self, array):self.array = arrayself.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 = arraydef 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 = 0N = 5a = 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 ]]