Create sparse matrices with integer rows and columns

4 次查看(过去 30 天)
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!

采纳的回答

Thorsten
Thorsten 2016-7-25
  5 个评论
Martin Peron
Martin Peron 2016-7-26
@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 2016-7-26
编辑:James Tursa 2016-7-26
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.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by