考虑到矩阵本质上是块对角线但随机选择了不明智的基础,是否有一种算法可以将矩阵重新排列为块对角线形式?
特别是,是否有任何 python 模块用于此?
考虑到矩阵本质上是块对角线但随机选择了不明智的基础,是否有一种算法可以将矩阵重新排列为块对角线形式?
特别是,是否有任何 python 模块用于此?
矩阵是稀疏的还是密集的?是对称的吗?
我假设“重新排列”是指置换条目,而不是对矩阵应用一些更一般的相似性变换。在这种情况下,您可以将矩阵视为图形; ,则该图的两个顶点,是连接的。如果矩阵不是对称的,那么边缘是有向的,但这是相同的想法。
您的矩阵是(直到重新排序)块对角线这一事实意味着该图没有连接,并且找到哪些顶点应该在一个块中等于找到图的连接组件。您可以通过广度优先搜索来做到这一点。由于矩阵的反向 Cuthill-McKee 排序本质上是广度优先搜索,因此您可能可以找到某人用于 RCM 排序的 Python 代码并直接使用它或根据您的目的对其进行修改。
每个矩阵在基的明智选择中都是块对角矩阵 - 这称为Jordan 范式,基由其广义特征向量组成。如果矩阵是对称的,则该基由特征向量组成,您可以使用例如QR 算法来计算它。SciPy 提供了linalg.qr
计算必要的 QR 分解的模块。否则,您可以使用奇异值分解,它可以使用 来计算linalg.svd
。