我有一个大的稀疏矩阵,我想置换它的行或列以将原始矩阵变成块对角矩阵。任何人都知道 R 或 MATLAB 中的哪些函数可以做到这一点?非常感谢。
问问题
2503 次
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 回答