5

我有一个大的稀疏矩阵,我想置换它的行或列以将原始矩阵变成块对角矩阵。任何人都知道 R 或 MATLAB 中的哪些函数可以做到这一点?非常感谢。

4

4 回答 4

2

我并没有真正准备好对此进行测试,但是对于矩阵m我会尝试:

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

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

于 2012-11-30T20:51:14.037 回答
1

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

于 2012-12-01T06:02:50.683 回答
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 将它们恢复为矩阵。

于 2012-12-01T07:44:18.710 回答
1

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

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

这相当于Dulmage - Mendelsohn排列。

于 2015-05-21T10:32:07.657 回答