使用
np.linalg.eig
同时求特征值和特征向量
import numpy as np
#输入矩阵
A = np.array([[1, 1/2, 1/6, 1/9],
[2, 1, 1/3, 1/5],
[6, 3,1,1/2],
[9, 5,2,1]])
#求解特征值和其对应的特征向量
eigval,eigvec = np.linalg.eig(A)
for i in range(len(eigval)):
print(f'特征值:{eigval[i]}\n对应的特征向量:\n{np.array_str(eigvec[:,i], precision=2)}\n')
# 求出最大特征值和对应的特征向量
index = np.argmax(eigval) # 最大特征值下标
eigval_max = np.real(eigval[index]) # 最大特征值
vector = eigvec[:,index] # 最大特征值对应特征向量
vector_final = np.transpose((np.real(vector))) # 只求出向量的实部
print(f'最大特征值为:{eigval_max}\n对应的特征向量:\n{vector_final}')
返回结果
特征值1:4.01+0.00j
对应的特征向量1:[0.09+0.j 0.17+0.j 0.48+0.j 0.86+0.j]特征值2:-0.00+0.18j
对应的特征向量2:[-0.03-0.07j -0.06-0.02j -0.16+0.43j 0.88+0.j ]特征值3:-0.00-0.18j
对应的特征向量3:[-0.03+0.07j -0.06+0.02j -0.16-0.43j 0.88-0.j ]特征值4:0.00+0.00j
对应的特征向量4:[ 2.29e-01+0.j -6.88e-01+0.j 6.88e-01+0.j -4.38e-15+0.j]
注意
1.np.linalg.eig(A)返回的eigvec是一个矩阵,而特征向量是每一列
2.特征向量概念,这里求出的特征向量不是唯一的,不一定是基础解系
3.
np.array_str()
是 NumPy 库中的函数,用于将数组转换为字符串
。在上述代码中,我们使用np.array_str()
函数来将特征向量的数组以字符串形式输出。允许指定精度 (precision
),以及其他格式化选项。
在这里,我们使用np.array_str(eigvec[:, i], precision=2)
,其中eigvec[:, i]
是第i
列的特征向量数组,而precision=2
表示要显示的小数点后的位数为两位。这样可以确保特征向量以更整洁的方式显示。