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

ゲームには少し遅れているかもしれませんが、使用可能なコマンドがあるので、ここでは簡単なものを示します。行列 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 に答える