Create sparse matrices with integer rows and columns

10 visualizaciones (últimos 30 días)
Martin Peron
Martin Peron el 25 de Jul. de 2016
Editada: James Tursa el 26 de Jul. de 2016
Hi,
I am creating a fairly large sparse matrix from row-column-value triplets. Row and column numbers are obviously integer, so I tried to change the types of the row and column arrays from 'double' to 'uint32', in an attempt to reduce the memory used. I get the following error message: "Undefined function 'sparse' for input arguments of type 'uint32'."
Is there a way to format the row and column arrays so that less than 8 bytes per entry are used?
Thanks!

Respuesta aceptada

Thorsten
Thorsten el 25 de Jul. de 2016
  5 comentarios
Martin Peron
Martin Peron el 26 de Jul. de 2016
@John: Yes, but, in principle, if one knows one's matrix is not larger than 2^32 rows and columns, coding them as uint32 would save 33% of space when storing the triplets (8 (val) +4+4 bytes per entry instead of 8+8+8), which seems fairly serious to me. Anyway, I understand this may not happen so often.
James Tursa
James Tursa el 26 de Jul. de 2016
Editada: James Tursa el 26 de Jul. de 2016
See this related link (some of which I repeat below for convenience):
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:
bytes = max(nnz,1) * (4 + 8) + (n+1)*4
Which breaks down as follows:
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
Each row value and index gets stored, plus the cumulative column index data gets stored.
For 64-bit systems using 8-byte integers for the indexing you can replace the 4's above with 8's. So, in theory on a 64-bit system, moving from 8-byte index integers to 4-byte index integers would be more like a 25% savings (the 8+8 would become 4+8) assuming the nnz part is dominating the calculation.
This is just the minimum requirements. A sparse matrix can have excess memory allocated beyond the minimum if desired.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by