Create sparse matrices with integer rows and columns

조회 수: 10 (최근 30일)
Martin Peron
Martin Peron 2016년 7월 25일
편집: James Tursa 2016년 7월 26일
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