我有一个大型稀疏矩阵,想要重新排列其行或列,将原始矩阵转化为块对角矩阵。请问R或MATLAB中有哪些函数可以实现这个功能?非常感谢。
我有一个大型稀疏矩阵,想要重新排列其行或列,将原始矩阵转化为块对角矩阵。请问R或MATLAB中有哪些函数可以实现这个功能?非常感谢。
我并不是专门用来测试的,但对于矩阵m
,我建议尝试以下方法:
p = symrcm(m);
block_m = m(p,p);
help sparkfun
中列出的其他函数,看看是否有任何帮助。[p,q] = dmperm(H);
H(p,q)
不确定这是否符合您的要求,但在MATLAB中,这是我过去使用过的方法。可能不是最优雅的解决方案。 我从稀疏转换为完整,然后将其切成正方形块。
A=full(A);
然后:
blockedmatrix = mat2cell(A, (n*ones(1,size(A,1)/n)), ...
(n*ones(1,size(A,1)/n))); %found somewhere on internetz
这将返回一个单元格,其中每个条目的大小为nxn。 很容易提取感兴趣的块,对它们进行操作,然后使用cell2mat将它们恢复到矩阵中。
R中的seriation
包有许多工具可用于解决与此相关的问题。
?hclust
对数据进行聚类。您可以通过计算a
和b
数组的每一行(列)之间的距离来定义它们之间的距离,例如abs(a-b)
。然后,hclust()
将返回一个良好的排列,使得每一行(和列)都靠近在相同索引上具有非零值的行。 - Alipheatmap()
包pheatmap
。它将为您提供块对角矩阵的可视化。 - Ali