Matlab uint8 稀疏

Matlab uint8 sparse

在 Matlab 中创建稀疏矩阵时,您似乎可以创建一个填充逻辑数或双值数的稀疏矩阵。

在四处阅读时,我了解到 Matlab 不支持其他类型的稀疏矩阵,即 uint8 或其他整数。在我的应用程序中,我知道 max(values)==16,内存是至关重要的,因此我想要 uint8 个稀疏矩阵。

我可以看出使用 uint8 而不是 double 没有或几乎没有改善。

密集矩阵是一个连续数组,因此不需要额外的索引或结构化,每个元素的位置由其在内存中的物理位置给出。

但是稀疏矩阵还应该需要存储每个元素索引,在二维矩阵的情况下,这将是两个大小为 32 或 64 位的整数,以记住每个元素的行号和列号。最重要的是,可能会有一些与实现相关的开销,例如树结构或其他用于使稀疏矩阵运算高效的东西。

所以它不是 8 uint8 vs 64 double,内存使用量少八倍,而是 (8+32+32+log(n)+..) vs (64 +32+32+log(n)+..),我猜这最多可以节省 10-20%?

此外,如果我没记错的话,每个内存地址现在存储 64 位,即一个 double 或 8 个 uint8 打包在一起。这意味着每个条目需要使用一些额外的位来记住哪些 uint8 打包在我们需要的内存地址,并添加一些额外的位掩码操作来执行。

所以 Mathworks 的人可能做了类似的估计,并决定只做 double 稀疏矩阵。