Matlab uint8 稀疏
Matlab uint8 sparse
在 Matlab 中创建稀疏矩阵时,您似乎可以创建一个填充逻辑数或双值数的稀疏矩阵。
在四处阅读时,我了解到 Matlab 不支持其他类型的稀疏矩阵,即 uint8
或其他整数。在我的应用程序中,我知道 max(values)==16
,内存是至关重要的,因此我想要 uint8
个稀疏矩阵。
有没有办法创建 unit8
稀疏矩阵?
如果不是(最有可能),是否有任何明显的原因说明为什么 Matlab 没有实现 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
稀疏矩阵。
在 Matlab 中创建稀疏矩阵时,您似乎可以创建一个填充逻辑数或双值数的稀疏矩阵。
在四处阅读时,我了解到 Matlab 不支持其他类型的稀疏矩阵,即 uint8
或其他整数。在我的应用程序中,我知道 max(values)==16
,内存是至关重要的,因此我想要 uint8
个稀疏矩阵。
有没有办法创建
unit8
稀疏矩阵?如果不是(最有可能),是否有任何明显的原因说明为什么 Matlab 没有实现
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
稀疏矩阵。