0

正規分布ランダム行列または一様分布ランダム行列であるサイズ 10M*10M のスパース行列を matlab で取得する方法。以下で実行すると、エラーが発生しました。

n = 10000000;   
a = sprandn(n,n,0.1);
fid = fopen('e:/matlab/matrix/normal_1M01.mtx','w');
len = nnz(a);
fprintf(fid,'%s\n','% by taoyuan');
fprintf(fid,'%d %d %d\n',n,n,len);
[m,k,s]=find(a);
for j = 1:len
    fprintf(fid,'%d %d %f\n',m(j),k(j),s(j));
end
fclose(fid);

エラーは以下のとおりです。

??? Error using ==> rand
Maximum variable size allowed by the program is exceeded.

Error in ==> sprandn at 39
   i = fix( rand(nnzwanted, 1) * m ) + 1;

Error in ==> generate at 3
a = sprandn(n,n,0.1);

ちなみに、べき乗分布乱数行列であるスパース行列を取得する方法は、サイズも 10M*10M です。

4

1 に答える 1

1

問題は、10 要素ごとに 1 要素に対して非ゼロを生成しようとしていることです。

を試して10M * 10M * 0.1、プログラムの制限に達したことが合理的かどうかを考えてください。

確率が 0.1 の場合、実際にはあまりまばらではありません。確率を下げるか (大幅に)、小さなバッチで作業してください。

于 2013-10-11T10:24:28.510 に答える