MATLAB Answers

John
0

Concatenating large matrices - out of memory

Asked by John
on 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?

  0 Comments

Sign in to comment.

Tags

2 Answers

Answer by Matt J
on 12 Mar 2013
Edited by Matt J
on 12 Mar 2013
 Accepted Answer

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 Comments

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
on 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

Sign in to comment.


Answer by Konrad Malkowski on 12 Mar 2013

Have you tried explicitly storing the matrix as sparse?

  1 Comment

Yes, the matrices are sparse

Sign in to comment.