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