游戏开发者联盟

boost稀疏矩阵

Basic Linear Algebra Library

简称uBLAS ,它包含了3种稀疏矩阵的实现。本以为这个库没有了,没想到一直在更新。

用法

能用现有成熟库,就不自己写。用它替换掉我现有的实现。大致看了一下,用法比较简单。

Mapped Matrix

mapped_matrix<T, F, A>,就是 Dictionary of keys (DOK)。

模版参数 说明 默认值 可选值
T 存储的数据类型.
F 指定行优先还是列优先. 行优先 row_major , column_major
A 内部存储容器. map map_array<std::size_t, T>map_std<std::size_t, T>

Compressed Matrix

可以根据模版参数选择CSR CSC.

模版参数 说明 默认值 可选值
T 存储的数据类型.
F 指定行优先还是列优先. 行优先(CSR) row_major , column_major
IB compressed vector 下标起始值 0 0 或者 1
IA 索引存储容器. unbounded_array<std::size_t> unbounded_array<> , bounded_array<>std::vector<>
TA 值存储容器. unbounded_array<T> 同上

Coordinate Matrix

基本上大同小异,不再赘述。

使用uBLAS的优势

  • 成熟, 它随着boost发布了好几个大版本了,稳定性应该毋庸置疑。
  • 灵活,相似的API下,它提供了很多实现,我们可以方便的切换的不同实现,测试实际运行效果。
  • 节约时间,如果我们自己写的话,需要花时间精力去写,还要测试,修改bug,还有可能有潜在的bug。所以,先正确的跑起来再说。

已经用uBLAS替换了项目中的稀疏矩阵,用法和官方示例一样,不复杂。