Concatenating large matrices - out of memory
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have four 4096x4096 sparse matrices namely A, B, C, and D and they only have elements on the diagonal.
I tried to make a matrix X = [ A B; C D] which is 8192x8192 but I get an out of memory error.
Essentially, I need to multiply X with a 8192x1 vector Y.
Is there a more sophisticated way to do this?
0 Kommentare
Akzeptierte Antwort
Matt J
am 12 Mär. 2013
Bearbeitet: Matt J
am 12 Mär. 2013
X=[sparse(A),sparse(B);sparse(C), sparse(D)];
result = X*Y;
Or,
a=diag(A);
b=diag(B);
c=diag(C);
d=diag(D);
y1=Y(1:4096);
y2=Y(4097:end);
result = [a.*y1+b.*y2; c.*y1 + d.*y2];
2 Kommentare
Matt J
am 12 Mär. 2013
Are you sure they are already sparse? Or, are you sure the out-of-memory is coming from the statement X=[A B;C D]?
It doesn't make sense that diagonal sparse matrices of that size would give you any problems with memory. If you are on a 32 bit machine and you accidentally made those matrices non-sparse, I could see you getting such an error
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!