如何在matlab中获取大小为10M*10M的稀疏矩阵,该矩阵是正态分布随机矩阵或均匀分布随机矩阵。当我在下面执行此操作时,我遇到了错误。
n = 10000000;
a = sprandn(n,n,0.1);
fid = fopen('e:/matlab/matrix/normal_1M01.mtx','w');
len = nnz(a);
fprintf(fid,'%sn','% by taoyuan');
fprintf(fid,'%d %d %dn',n,n,len);
[m,k,s]=find(a);
for j = 1:len
fprintf(fid,'%d %d %fn',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。
问题是您正在尝试为每 10 个元素中的一个生成非零。
尝试10M * 10M * 0.1
,并考虑您达到程序限制是否合理。
如果你有 0.1 作为机会,它实际上不是很稀疏。要么降低概率(很多(,要么小批量工作。