To shrink the footprint of a sparse matrix, see https://www.mathworks.com/matlabcentral/answers/736432-how-do-i-shrink-the-memory-footprint-of-a-sparse-matrix-to-its-minimum?s_tid=answers_rc1-2_p2_BOTH
The memory use of a sparse matrix depends on its history
3 次查看(过去 30 天)
显示 更早的评论
The amount of memory used by a sparse matrix depends on its history. In a project this week, a matrix that could have consumed a few bytes was consuming gigabytes of memory.
Demonstration:
J = sparse(zeros(2,2));
J2 = [J zeros(2,2); zeros(1,4)];
J3 = sparse(zeros(3,4)); % same data as J2
isequal(J2,J3)
%ans =
% logical
% 1
whos('J2')
% Name Size Bytes Class Attributes
% J2 3x4 88 double sparse
whos('J3')
% Name Size Bytes Class Attributes
% J3 3x4 56 double sparse
%
% 88 > 56!
0 个评论
采纳的回答
更多回答(1 个)
Steven Lord
2025-2-26
The amount of memory required by a sparse matrix is not just a function of the number of rows and columns but also the number of non-zero elements stored and the number of non-zero locations allocated for storage. In the case of your J2 and J3, they are the same size but have different numbers of locations allocated for storage.
J = sparse(zeros(2,2));
J2 = [J zeros(2,2); zeros(1,4)];
J3 = sparse(zeros(3,4)); % same data as J2
numberOfNonzerosInJ2 = nnz(J2)
numberOfNonzerosAllocatedInJ2 = nzmax(J2)
numberOfNonzerosInJ3 = nnz(J3)
numberOfNonzerosAllocatedInJ3 = nzmax(J3)
If you know how many non-zero elements you're ultimately going to want your sparse matrix to contain, use the spalloc function to preallocate it.
J4 = spalloc(height(J2), width(J2), 2); % Matrix is same size as J2, but only 2 nonzero locations
whos J*
2 个评论
James Tursa
2025-2-26
编辑:James Tursa
2025-2-26
As a follow up, when encountered in operations MATLAB will shrink the resulting sparse memory allocation to the minimum size necessary. I am unaware of any published rules for what operations will trigger this, but it does seem to happen for the "usual" stuff. E.g.,
S = spalloc(1000,1000,10000);
T = S + sparse(0);
whos
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!