Help reducing memory usage during large matrix multiplication
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I have a certain 343-by-343 matrix V3 and a certain 343-by-1 vector V2 produced by certain algorithm and I want to do the following operation:
V4 = V3*(V2-I*C)
where I = eye(343), and C is a vector of zeros except for the 172th element, which is 1. I provided V3 and V2 as a workspace file in attachment. The size for V2 is actually big despite only having 343 elements because the elements contain symbols (namely "t") and a lot numbers. But the lengthy values of these elements are crucial.
The problem is, the memory usage during the calculation is about 14.5 GB (out of 15.284 GB available), and the calculation is quite slow. Since I am planning to do much larger scale calculations, this is very problematic to me.
Is there any workaround to prevent using so much RAM? Or is there nothing I can do other than to expand the RAM?
2 Kommentare
Antworten (1)
Sergey Kasyanov
am 9 Jun. 2018
Bearbeitet: Sergey Kasyanov
am 9 Jun. 2018
I think that problem can be solved by the manual multiplication of matrices.
%note: V2=(V2-I*C) is the same V2(172)=V2(172)-1;
V2(172)=V2(172)-1;
A=vpa(zeros(length(V2),1));
V2=V2.';
for i=1:length(V2)
A(i)=sum(V3(i,:).*V2);
end
A is the answer.
1 Kommentar
Sergey Kasyanov
am 9 Jun. 2018
Also you may use that solution. It claims less memory but It has less accuracy due to convertion integer ratio coefficients to float .
V2(172)=V2(172)-1;
A=vpa(zeros(length(V2),1));
V2=vpa(V2.');
for i=1:length(V2)
A(i)=sum(V3(i,:).*V2);
end
Siehe auch
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!