2

次のコマンドを使用して、MATLABにスパース行列をロードしています。

A = spconvert(load('mymatrix.txt'));

行列の次元が1222x1222であることは知っていますが、行列は1220 x 1221として読み込まれます。行列がまばらに保存されている場合、MATLABが行列の実際のサイズを推測することは不可能です。

Aを適切なサイズにするための可能な解決策は、mymatrix.txtに「122212220」という内容の行を含めることです。しかし、私は何百もの行列を持っており、それらすべてでこれを実行したくありません。

MATLABで行列のサイズを1222x1222に変更するにはどうすればよいですか?

4

3 に答える 3

2

私はこの問題に対する次の解決策を見つけました。これは単純で短いですが、思ったほどエレガントではありません。

A = spconvert(load('mymatrix.txt'));
if size(A,1) ~= pSize || size(A,2) ~= pSize
    A(pSize,pSize) = 0;
end

ここで、pSizeは行列の推奨サイズです。そこで、マトリックスをロードし、寸法が希望どおりでない場合は、右下隅に0要素を挿入します。

于 2012-05-05T19:00:17.273 に答える
1

申し訳ありませんが、この投稿は回答というよりも明確な質問のペアです。

まず、「load」コマンドまたは「spconvert」の問題ですか?のように、あなたがするなら

B = load('mymatrix.txt') 

Bはあなたが期待するサイズですか?そうでない場合は、「textread」または「fread」を使用して、「spconvert」に入力する前に適切なサイズの行列を作成する関数を作成できます。

次に、いくつかの行列をロードしていると言います。ロードしているすべてのマトリックス間で問題が一貫していますか。のように、マトリックスは常に予想より2行少なく1列少なくなりますか?

于 2012-05-05T18:41:24.120 に答える
1

私は同じ問題を抱えていました、そしてこれは私が遭遇した解決策です:

nRows = 1222;
nCols = 1222;
A = spconvert(load('mymatrix.txt'));

[i,j,s] = find(A);
A = sparse(i,j,s,nRows,nCols);

これは、ここにある例の1つを応用したものです。

于 2013-06-15T16:12:29.473 に答える