如何在Python中构造2×2块反对角对称稀疏矩阵?
构造块对称稀疏矩阵并使用eigsh求解特征值
我们需要基于稠密矩阵A构造形如[[0, A], [A^T, 0]]的对称块稀疏矩阵,再利用scipy的稀疏线性代数工具求解特征值与特征向量,以下是完整代码示例:
步骤1:导入依赖库
import numpy as np import scipy.sparse as sp from scipy.sparse.linalg import eigsh
步骤2:生成示例稠密矩阵
# 生成100x100的随机稠密矩阵A A = np.random.rand(100, 100)
步骤3:构造对称块稀疏矩阵
利用scipy.sparse.bmat拼接稀疏块矩阵,零块用None表示,自动转为稀疏格式:
# 拼接块矩阵,输出为CSR格式的稀疏矩阵 block_sparse_matrix = sp.bmat([ [None, sp.csr_matrix(A)], [sp.csr_matrix(A.T), None] ], format='csr')
注:CSR格式是稀疏矩阵的常用存储格式,适合后续的特征值计算操作
步骤4:用eigsh求解特征值与特征向量
由于构造的矩阵是对称的,使用eigsh可以高效求解指定数量的特征值(示例中取最大的5个):
# 求解模最大的5个特征值及其对应特征向量 eigenvalues, eigenvectors = eigsh(block_sparse_matrix, k=5, which='LM') # 打印结果 print("特征值:", eigenvalues) print("特征向量形状:", eigenvectors.shape)
额外验证(可选)
可以验证构造的矩阵是否对称:
is_symmetric = np.allclose(block_sparse_matrix.toarray(), block_sparse_matrix.T.toarray()) print("矩阵是否对称:", is_symmetric)
内容的提问来源于stack exchange,提问作者Guy Fly
相关产品推荐
相关产品推荐

