What's the reason for different memory consumption for sparse row and column vectors?

1 view (last 30 days)
Peng Liu
Peng Liu on 3 Sep 2016
Commented: Walter Roberson on 3 Sep 2016
See below:
>> a = sparse(1e12,1);
>> b = sparse(1,1e9);
>> whos a b
Name Size Bytes Class Attributes
a 1000000000000x1 32 double sparse
b 1x1000000000 8000000024 double sparse
>> clear all
>> c = sparse(1,1e10);
Error using sparse
Requested 1x10000000000 (74.5GB) array exceeds maximum array size preference.
Creation of arrays greater than this limit may take a long time and cause
MATLAB to become unresponsive. See array size limit or preference panel for
more information.

Accepted Answer

Peng Liu
Peng Liu on 3 Sep 2016
Edited: Peng Liu on 3 Sep 2016
% The minimum data storage requirement formula for a double m x n sparse
% matrix with nnz non-zero elements, including the index data, is as
% follows on a 32-bit system:
%
% max(nnz(x),1) * (4 + 8) + (size(x,2)+1)*4; % 32-bit
% max(nnz(x),1) * (8 + 8) + (size(x,2)+1)*8; % 64-bit
%
% nnz * 4 = Storing the row index of the non-zero elements
% nnz * 8 = Storing the non-zero double element values themselves
% (n+1)*4 = Storing the cumulative number of non-zero elements thru column
%
% For 64-bit systems using 8-byte integers for the indexing you can replace
% the 4's above with 8's.

More Answers (1)

Walter Roberson
Walter Roberson on 3 Sep 2016

Community Treasure Hunt

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

Start Hunting!

Translated by