Concatenating large matrices - out of memory

4 vues (au cours des 30 derniers jours)
John
John le 12 Mar 2013
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?

Réponse acceptée

Matt J
Matt J le 12 Mar 2013
Modifié(e) : Matt J le 12 Mar 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 commentaires
John
John le 12 Mar 2013
Thanks but for your first solution, A, B , C, and D are already sparse. Does it change anything if you apply the sparse function again when it's being concatenated.
Matt J
Matt J le 12 Mar 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

Connectez-vous pour commenter.

Plus de réponses (1)

Konrad Malkowski
Konrad Malkowski le 12 Mar 2013
Have you tried explicitly storing the matrix as sparse?
  1 commentaire
John
John le 12 Mar 2013
Yes, the matrices are sparse

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by