algorithm - 矩阵重新排序以阻止对角线形式

标签 algorithm matlab matrix linear-algebra graph-algorithm

给定一个稀疏矩阵,如何通过行列置换将行和列重新排序,使其成为 block 状对角线形式?

行和列排列不一定像反向 Cuthill-McKee 排序那样耦合: http://www.mathworks.com/help/matlab/ref/symrcm.html?refresh=true简而言之,您可以独立执行任何行或列排列。

总体目标是将所有非零元素向对角线聚集。

最佳答案

这是一种方法。

首先做一个图,其顶点是行和列。每个非零值都是该行和该列之间的边。

然后您可以使用标准图论算法来检测此图的连通分量。单个元素代表所有零行和零列。给其他人编号。这些组件的行数和列数可能不相等。您可以给它们分配一些零行和零列,使它们呈正方形。

您的方形组件将成为您的 block ,根据这些组件的编号,您知道将它们放入的顺序。现在只需重新排列行和列即可实现此结构,瞧! (剩余的零行/列将在对角线的右下方产生一堆 0 block 。)

关于algorithm - 矩阵重新排序以阻止对角线形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800771/

相关文章:

matlab - 如何使用 LaTeX 解释器创建两行标题?

matlab - 如果在 matlab 中,则进行矢量化

java - 如何打印 JAMA 矩阵的列?

java - DPLL 算法 - 仅建议

python - 分组相关搜索关键字

algorithm - 什么是组合预排序集的最快排序算法

matlab - Symbolic Math Toolbox 在用于计算 NaN 时遇到被零除错误

c# - 在 C# 中旋转图像的矩阵乘法

c++ - 从 Eigen 中的 bool 矩阵采样

arrays - 确定大 O : Find 4 different numbers in array summing up to S