qq_35203134 2023-06-28 11:26 采纳率: 0%
浏览 35
已结题

矩阵第二大特征值和特征向量

已知矩阵B,想求该矩阵的第二大特征值和对应的特征向量
这一段Python代码怎么写

之前对于最大特征值和特征向量采取如下求法

lamda = np.linalg.eig(B)

for i in range(len(lamda[0])):
    print('特征值:{0}\n对应的特征向量:\n{1}\n'.format(lamda[0][i], np.transpose([lamda[1][:,i]])))

index = np.argmax(lamda[0])
lamda_max = np.real(lamda[0][index])
vector = lamda[1][:,index]

vector_final = np.transpose((np.real(vector)))

print('最大特征值为:{0}\n对应的特征向量:\n{1}'.format(lamda_max, vector_final))

第二大的这个逻辑已知没整明白

  • 写回答

7条回答 默认 最新

  • PhoenixRiser 2023-06-29 10:31
    关注
    获得0.60元问题酬金

    对特征值进行排序,然后选择第二大的那个就行了

    import numpy as np
    
    B = ...  # 这是你的矩阵
    eigvals, eigvecs = np.linalg.eig(B)
    
    # 按照特征值从大到小排序的索引
    indices = np.argsort(eigvals)[::-1] 
    
    # 最大的特征值和特征向量
    lamda_max = np.real(eigvals[indices[0]])
    vector_max = np.real(eigvecs[:,indices[0]])
    
    # 第二大的特征值和特征向量
    lamda_second_max = np.real(eigvals[indices[1]])
    vector_second_max = np.real(eigvecs[:,indices[1]])
    
    print('最大特征值为:{0}\n对应的特征向量:\n{1}'.format(lamda_max, vector_max))
    print('第二大特征值为:{0}\n对应的特征向量:\n{1}'.format(lamda_second_max, vector_second_max))
    
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 修改了问题 6月29日
  • 赞助了问题酬金15元 6月28日
  • 创建了问题 6月28日