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

1 vue (au cours des 30 derniers jours)
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.

Réponse acceptée

Peng Liu
Peng Liu le 3 Sep 2016
Modifié(e) : Peng Liu le 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.
  1 commentaire
Walter Roberson
Walter Roberson le 3 Sep 2016
Yup, so with you having requested many columns in the second version, it needs lots of memory.

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 3 Sep 2016

Catégories

En savoir plus sur Sparse Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by