Create sparse matrices with integer rows and columns
10 views (last 30 days)
Show older comments
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!
0 Comments
Accepted Answer
Thorsten
on 25 Jul 2016
5 Comments
James Tursa
on 26 Jul 2016
Edited: James Tursa
on 26 Jul 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.
More Answers (0)
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!