2013-10-11 41 views
0

如何在matlab中得到10M * 10M的稀疏矩陣,該矩陣是正態分佈的隨機矩陣或均勻分佈的隨機矩陣。當我在下面做時,我得到了錯誤。如何在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,'%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兩種。

+2

稀疏矩陣中的每個元素佔用16個字節,因此您的矩陣需要大約145 TB的「10^7 * 10^7 * 0.1 * 16」字節。我不認爲你的計算機上安裝了太多的內存:-) –

回答

1

問題是,您正在嘗試爲每10個元素中的一個生成一個非零值。

嘗試10M * 10M * 0.1,並考慮您是否已達到程序限制是合理的。

如果你有0.1的機會,它實際上不是很稀疏。減少概率(很多)或小批量工作。

+0

你是對的,它使用「sprandn(n,n,0.0000001)」,謝謝! – taoyuanjl

+0

如何得到一個冪律分佈隨機矩陣的稀疏矩陣? – taoyuanjl