Matlab uint8稀疏

Matlab uint8稀疏,matlab,sparse-matrix,Matlab,Sparse Matrix,在Matlab中创建稀疏矩阵时,似乎可以创建一个填充逻辑或双值数字的稀疏矩阵 在阅读时,我了解到Matlab不支持其他类型的稀疏矩阵,即uint8或其他整数。在我的应用程序中,我知道max(values)==16,而内存是至关重要的,因此我希望使用uint8稀疏矩阵 有没有办法创建unit8稀疏矩阵 如果不是(最有可能),是否有任何明显的原因说明为什么Matlab没有实现uint8稀疏矩阵 我可以看出,使用uint8而不是双倍将不会有什么改进 密集矩阵是一个连续数组,因此不需要额外的索引或结构

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

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

  • 有没有办法创建
    unit8
    稀疏矩阵

  • 如果不是(最有可能),是否有任何明显的原因说明为什么Matlab没有实现
    uint8
    稀疏矩阵


我可以看出,使用
uint8
而不是
双倍
将不会有什么改进

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

但稀疏矩阵还需要存储每个元素索引,在2D矩阵中,索引是两个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的人可能做了类似的估计,决定只做
稀疏矩阵。

你想对这个矩阵做什么样的运算?主要是乘法,但也有其他一些运算。该算法适用于层析成像应用中的迭代代数重建技术。稀疏矩阵的使用在那里相当普遍@Bikerso实现您自己的替换将不是一件小事;)嗯,我明白了,这是有道理的。然而,我的矩阵在RAM上是1.5GB,所以绝对欢迎任何改进。谢谢你的洞察力!请注意,Matlabs矩阵不是“完全稀疏的”。每个元素只存储列索引(可以通过:X=sparse(110000);whosx;)轻松检查)。因此,您的计算更改为8+32+log(n)。。vs 64+32+对数(n)。