## Concatenating large matrices - out of memory

on 12 Mar 2013

### Matt J (view profile)

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?

on 12 Mar 2013
Edited by Matt J

### Matt J (view profile)

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

John

### John (view profile)

on 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 (view profile)

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

on 12 Mar 2013

Have you tried explicitly storing the matrix as sparse?

John

### John (view profile)

on 12 Mar 2013
Yes, the matrices are sparse