稀疏矩阵

三种稀疏矩阵的存储方式,包括COO、CSC和CSR

#COO Matrix

coo

最简单一种格式,每一个元素需要用一个三元组来表示,分别是(行号,列号,数值),这种方式简单,但是记录单信息多(行列),每个三元组自己可以定位,因此空间不是最优。

优点:

  • 容易构造,比较容易转换成其他的稀疏矩阵存储格式(CSR等)

  • 写程序可以将 libsvm 格式的数据转换成 COO 比较容易,应该是充当 libsvm 与其他稀疏矩阵存储格式转换的媒介。

  • 支持相同的(row,col)坐标上存放多个值。

缺点:

  • 构建完成后不允许再插入或删除元素。不能进行常规矩阵运算。

  • 不能直接进行科学计算和切片操作。

#CSR Matrix

csr

比较标准,数值,列号,以及行偏移。 (相当于每行的首个元素在 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

CSC 是和 CSR 相对应的一种方式,即按列压缩的意思。

updatedupdated2022-05-032022-05-03