如何重新排序/聚类邻接矩阵以最大化沿超对角线的交互?

计算科学 图论
2021-12-21 10:59:41

我有以下代码,它采用 DataFrame 并绘制 pdist 矩阵。

from scipy.spatial.distance import squareform, pdist
res = pdist(df, 'euclidean')
df1 = pd.DataFrame(squareform(res), index=df.index, columns= df.index)
plt.imshow(df1)

在此处输入图像描述

我想重新排序列,以便邻接矩阵将具有更高交互的行/列聚集在一起。让它看起来像这样

在此处输入图像描述

1个回答

据我了解,您正在寻找一系列用于重新排序稀疏矩阵的算法。通常用于稀疏分解时减少填充;但是,它肯定不是唯一的用途。

第一个候选者是(反向)Cuthill-McKee 算法此外,请查看Matlab 稀疏矩阵重新排序页面,该页面将展示“列数”和“最小度数重新排序”的工作。许多其他的存在。此外,关于 SciComp 的这个问题可能很有用。策略的特定选择将取决于其预期用途和对重排序阶段重度的要求。

请注意,您作为示例显示的图片是通过使用有关矩阵条目的附加信息对邻接矩阵进行排序来生成的,以创建逐块结构。我列出的算法仅使用矩阵本身。