数据结构中我们就已经了解过稀疏矩阵的概念。在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。
仅有几个0元素不太算稀疏矩阵,很大的数据集中大部分元素都是0的情况比较符合稀疏矩阵的实际意义。这种情况在平时可能很难见到,但在机器学习中可能是很常见的。
我们不妨举个例子:我们想象一个矩阵,列元素是腾讯视频平台上的所有视频,行元素是腾讯视频的所有用户,矩阵中的每个元素的值代表某个视频每个用户看过几次。这个矩阵将会拥有很多很多的行和列。但我们也知道,某个用户看的视频再多,相较于海量的视频库都不算什么;很多用户甚至可能几乎没看过视频。这个矩阵的绝大多数的元素是0!
再举个例子:我们再想想一个矩阵(方阵),行列元素都是微信用户,矩阵中的每个元素代表两个用户之间的好友关系。就算我们是公众号号主或者社交达人,好友上限也是5000(之前是5000,现在好像也不可能无限多)。这个矩阵的绝大多数元素是0!
上面两个例子只是自己编的,但足以表明很多实际的问题需要稀疏矩阵。稀疏矩阵只保存非零元素并假设其余元素的值都是0,这样能节省大量的计算成本。甚至有时一个矩阵和一个比它大很多倍的矩阵的压缩存储是一致的,增加的0元素不改变稀疏矩阵的大小。
稀疏矩阵的类型有很多,比如,压缩的行,压缩的列,表中表,键值对字典等等,不仅仅是大家在学习数据结构时了解的狭义矩阵。值得一提的是,类型不同的稀疏矩阵不存在真正完美的存在,它们之间的差异带来了自己独特的优劣势,在处理不同问题时能绽放出自己的光芒。