大きな疎行列があり、その行または列を並べ替えて、元の行列をブロック対角行列に変換したいと考えています。RまたはMATLABのどの関数がこれを行うことができるか誰でも知っていますか? どうもありがとう。
2503 次
4 に答える
2
私は実際にこれをテストするように設定されていませんが、マトリックスの場合m
は試してみます:
p = symrcm(m);
block_m = m(p,p);
それでもうまくいかない場合は、 にリストされている他の機能を調べて、help sparfun
役立つものがないかどうかを確認してください。
于 2012-11-30T20:51:14.037 に答える
1
ゲームには少し遅れているかもしれませんが、使用可能なコマンドがあるので、ここでは簡単なものを示します。行列 H があり、ブロックの対角形式が必要な場合は、次の行 ( MATLAB )で取得できます。
[p,q] = dmperm(H);
H(p,q)
これはDulmage - Mendelsohn順列に相当します。
于 2015-05-21T10:32:07.657 に答える
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
Rのseriation
パッケージには、これに関連する問題のためのツールが多数含まれています。
于 2012-12-01T06:02:50.683 に答える