#COO Matrix
最简单一种格式,每一个元素需要用一个三元组来表示,分别是(行号,列号,数值),这种方式简单,但是记录单信息多(行列),每个三元组自己可以定位,因此空间不是最优。
优点:
-
容易构造,比较容易转换成其他的稀疏矩阵存储格式(CSR等)
-
写程序可以将 libsvm 格式的数据转换成 COO 比较容易,应该是充当 libsvm 与其他稀疏矩阵存储格式转换的媒介。
-
支持相同的(row,col)坐标上存放多个值。
缺点:
-
构建完成后不允许再插入或删除元素。不能进行常规矩阵运算。
-
不能直接进行科学计算和切片操作。
#CSR Matrix
比较标准,数值,列号,以及行偏移。 (相当于每行的首个元素在 value 中的 index) row offset 的数值个数是 row + 1, 表示某行第一个元素在 values 中的位置,如 5 是第三行第一个元素,它在 values 中的 index 是 4。
优点:
-
高效地按行切片。
-
快速地计算矩阵与向量的内积。
-
高效地进行矩阵的算术运行,CSR + CSR、CSR * CSR等。
缺点:
-
按列切片很慢(考虑 CSC)
-
一旦构建完成后,再往里面添加或删除元素成本很高
-
CSR 格式在存储稀疏矩阵时非零元素平均使用的字节数(Bytes per Nonzero Entry)最为稳定(float 类型约为 8.5,double类型约为 12.5)。CSR 格式常用于读入数据后进行稀疏矩阵计算。
#CSC Matrix
CSC 是和 CSR 相对应的一种方式,即按列压缩的意思。