Matlab为稀疏矩阵分配比所需内存更多的内存

gle*_*lep 1 matlab sparse-matrix

假设我创建了这个稀疏矩阵,其中非零元素由布尔"true"组成:

s =稀疏([3 2 3 3 3 3 2 34 3 6 3 2 3 3 3 3 2 3 3 6],[10235 11470 21211 33322 49297 88361 91470 127422 152383 158751 166485 171471 181211 193321 205548 244609 251470 283673 312384 318752],真正);

其中包含20个元素.Matlab应该分配不超过(4 + 4 + 1)*20 = 180字节的内存(看起来索引长度为4个字节).然而

谁的

说矩阵在内存中占用1275112字节,这是一个问题,因为我需要存储数千个这样的字节.

知道为什么会这样吗?

干杯!

Pet*_*ter 5

MATLAB中稀疏矩阵的存储器存储格式是一个密集的列指针数组.每个列指针指向一个非零元素列表,每个元素都需要一个索引和一个值.所以公式是

(max column num) x P + (num nonzero) x (P + S)
Run Code Online (Sandbox Code Playgroud)

其中P是指针大小(64位系统上为8个字节,32位系统上为4个字节),S是单个元素的大小.1为逻辑.对于你的问题,我得到1275108,或"足够接近".

那该怎么办呢?请注意大内存驱动程序:最大列数,因为列指针密集.在您的情况下,如果您反转索引顺序并存储矩阵的转置,它只需要236个字节(在32位系统上).