在 Matlab 中创建稀疏矩阵时,您似乎可以创建一个填充逻辑数或双值数的稀疏矩阵。
在阅读周围内容时,我了解到 Matlab 不支持其他类型的稀疏矩阵,即uint8
或其他整数。在我的应用程序中我知道max(values)==16
,而记忆是至关重要的,因此我想要uint8
稀疏矩阵。
我可以看到如何使用uint8
代替double
不会有任何改善或改善很小。
密集矩阵是一个连续数组,因此不需要额外的索引或结构,每个元素的位置由其在内存中的物理位置给出。
但是稀疏矩阵还应该需要存储每个元素索引,在 2D 矩阵的情况下,该索引将是两个 32 或 64 位大小的整数,以记住每个元素的行号和列号。最重要的是,可能存在一些与实现相关的开销,例如树结构或其他东西,用于使稀疏矩阵运算高效。
所以不是8uint8
vs 64 double
,内存使用量减少八倍,而是 (8+32+32+log(n)+..) vs (64+32+32+log(n)+..),我猜最终可能是 10最多可以节省-20%?
此外,如果我没记错的话,每个内存地址现在存储 64 位,这是一个double
or 8 uint8
挤在一起。这意味着每个条目需要使用一些额外的位来记住哪个uint8
打包到我们需要的内存地址,并添加一些额外的位掩码操作来执行。
所以 Mathworks 的人可能做了类似的估计,并决定这样做double
稀疏矩阵。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)