2013-10-11 1 views
0

Как получить разреженную матрицу размером 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 байт, поэтому ваша матрица требует около 10 ~ 7 * 10^7 * 0,1 * 16' байт, что составляет около 145 терабайт. Я не думаю, что на вашем компьютере установлена ​​такая большая оперативная память :-) –

ответ

1

Проблема в том, что вы пытаетесь генерировать ненулевые значения для одного из каждых 10 элементов.

Попробуйте 10M * 10M * 0.1 и подумайте, разумно ли, что вы попали в пределы программы.

Если у вас есть шанс 0,1, это на самом деле не очень редко. Либо уменьшите вероятность (много), либо работайте небольшими партиями.

+0

вы правы, он работает с использованием «sprandn (n, n, 0.0000001)», спасибо! – taoyuanjl

+0

Как получить разреженную матрицу, которая является степенной распределенной случайной матрицей? – taoyuanjl

Смежные вопросы