Concatenating large matrices - out of memory

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?

 採用された回答

Matt J
Matt J 2013 年 3 月 12 日
編集済み: Matt J 2013 年 3 月 12 日

0 投票

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 件のコメント

John
John 2013 年 3 月 12 日
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 2013 年 3 月 12 日
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

サインインしてコメントする。

その他の回答 (1 件)

Konrad Malkowski
Konrad Malkowski 2013 年 3 月 12 日

0 投票

Have you tried explicitly storing the matrix as sparse?

1 件のコメント

John
John 2013 年 3 月 12 日
Yes, the matrices are sparse

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

質問済み:

2013 年 3 月 12 日

Community Treasure Hunt

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

Start Hunting!

Translated by