R或MATLAB:将大的稀疏矩阵置换为块对角矩阵

时间:2012-11-30 19:14:36

标签: r matlab block sparse-matrix diagonal

我有一个大的稀疏矩阵,我希望对其行或列进行置换,将原始矩阵转换为块对角矩阵。有谁知道R或MATLAB中的哪些函数可以做到这一点?非常感谢。

4 个答案:

答案 0 :(得分:2)

我并没有真正设置测试这个,但对于矩阵m我会尝试:

p = symrcm(m);
block_m = m(p,p);

如果这不起作用,请查看help sparfun中列出的其他功能,看看是否会有任何帮助。

答案 1 :(得分:1)

R中的seriation包有许多与此问题相关的问题的工具。

答案 2 :(得分:1)

不确定这是否是您想要的,但在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将它们恢复到矩阵。

答案 3 :(得分:1)

游戏可能有点晚了,但由于有可用的命令,这里有一个简单的命令。如果你有一个矩阵H并且需要块对角形式,你可以通过以下几行( MATLAB )获得它:

[p,q] = dmperm(H);
H(p,q)

相当于 Dulmage - Mendelsohn 排列。