什么是稀疏矩阵
在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;反之,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数除以矩阵所有元素的总数为矩阵的稠密度。
稀疏矩阵几乎产生于所有的大型科学工程计算领域,包括计算流体力学、统计物理、电路模拟、图像处理、纳米材料计算等。对稀疏性感兴趣的原因是利用好这一特性能够大幅降低计算量,并且在实践中发现很多大型矩阵问题也是稀疏的。
如下是一个3*6的稀疏矩阵:

稀疏矩阵存在的问题
存储空间浪费
稀疏矩阵存在的问题就是它的零值非常多,而这些零值本身不携带任何信息,将这些矩阵按照实际的形式存储对内存的浪费是十分严重的。比如在搜索引擎中要记录一个网站到另一个网站的链接;关键词对包含关键词的反向索引的文档的记录,他们存储矩阵是十分稀疏的,而在实际的搜索中,动辄百亿千亿的数据向量运算所需的内存是十分惊人的。
计算资源的浪费
即使大型的稀疏矩阵可以存储在内存中,因为稀疏矩阵主要包含的是零值,即使没有多少有效数据,对矩阵执行操作可能需要花费很长的时间,其中执行的大部分计算将涉及零值相加或相乘。在这样的问题上使用线性代数的方法是浪费的,因为大多数O(N^3)的算术运算致力于求解方程组或矩阵求逆涉及的零操作数。
最常用的稀疏矩阵存储格式为列压缩存储(compressed column storage,CCS) 或行压缩存储(compressed row storage,CRS)。
Python中的稀疏矩阵
Python中提供了稠密矩阵转化为稀疏矩阵的工具。在下面的例子中,定义一个3x6稀疏矩阵作为一个稠密数组,将其转换为CSR稀疏表示,然后通过todense()将其转换回稠密数组。

打印结果如下:

本文介绍了稀疏矩阵的概念,指出其在存储和计算上的问题,特别强调了存储空间浪费和计算资源的浪费。文章提到,对于稀疏矩阵,常用的存储格式是列压缩存储(CCS)和行压缩存储(CRS)。在Python中,可以使用工具将稠密矩阵转换为稀疏矩阵,并展示了转化过程。
692

被折叠的 条评论
为什么被折叠?



