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 = 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 ] ]