Boost C++ 库

……世界上最受推崇、设计最精巧的 C++ 库项目之一。 Herb SutterAndrei AlexandrescuC++ 编码标准

Boost 基本线性代数 - Boost C++ 函数库

uBLAS 是一个 C++ 模板类库,为密集、打包和稀疏矩阵提供了 BLAS 1、2、3 级功能。其设计和实现通过运算符重载统一了数学表示法,并通过表达式模板实现了高效的代码生成。

功能

uBLAS 提供了模板化的 C++ 类,用于密集、单位和稀疏向量,密集、单位、三角、带状、对称、厄米特和稀疏矩阵。可以通过范围、切片、适配器类和间接数组构建向量和矩阵的视图。该库涵盖了向量和矩阵上常用的基本线性代数运算:如不同范数的约简、向量和矩阵的加减以及与标量的乘法、向量的内积和外积、矩阵向量积和矩阵矩阵积以及三角求解器。容器、视图和表达式模板操作之间的连接主要是 STL 兼容的迭代器接口。

文档

发行说明

发布说明可在此处找到。

已知限制

更多信息

作者和鸣谢

uBLAS 最初由 Joerg Walter 和 Mathias Koch 编写。我们感谢所有支持和贡献了该库开发的人:David Abrahams、Ed Brey、Fernando Cacciola、Juan Jose Gomez Cadenas、Beman Dawes、Matt Davies、Bob Fletcher、Kresimir Fresl、Joachim Kessel、Patrick Kowalzick、Toon Knapen、Hendrik Kueck、John Maddock、Jens Maurer、Alexei Novakov、Gary Powell、Joachim Pyras、Peter Schmitteckert、Jeremy Siek、Markus Steffl、Michael Stevens、Benedikt Weber、Martin Weiser、Gunter Winkler、Marc Zimmermann、Marco Guazzone、Nasos Iliopoulus,Boost 成员以及全球其他所有贡献者。我保证会努力将他们的名字添加到此列表中。

该库目前由 David Bellot 和 Stefan Seefeld 维护。

常见问题

问:我应该为新项目使用 uBLAS 吗?
答:截至撰写本文时(2012 年 9 月),有许多优秀的矩阵库可用,例如 MTL4armadilloeigen。uBLAS 提供了一组稳定、经过充分测试的向量和矩阵类,以及线性代数所需的典型运算和三角方程组的求解器。uBLAS 提供密集、结构化和稀疏矩阵——所有这些都使用相似的接口。最后,uBLAS 提供了良好(但非顶尖)的性能。另一方面,uBLAS 上一次重大改进是在 2008 年,自 2009 年以来没有重要的更改提交。因此,在做决定时,应该问自己一些问题:可用性? uBLAS 是 boost 的一部分,因此在许多环境中都可用。易用性? uBLAS 对于简单的事情很容易使用,但如果您偏离常规,则需要扎实的 C++ 知识。性能? 有更快的替代方案。最前沿? uBLAS 已有 10 多年的历史,错过了 C++11 的所有新特性。

问:我正在运行 uBLAS 密集向量和矩阵基准测试。为什么我会在原生 C 和库实现之间看到显著的性能差异?
答:uBLAS 区分调试模式(启用了大小和类型一致性检查,禁用表达式模板)和发布模式(禁用了大小和类型一致性检查,启用了表达式模板)。请检查 `cassert` 的预处理器符号 `NDEBUG` 是否已定义。`NDEBUG` 启用发布模式,该模式进而使用表达式模板。您可以选择定义 `BOOST_UBLAS_NDEBUG` 来禁用 uBLAS 的所有边界、结构等检查。

问:我编写了一些 uBLAS 测试,试图错误地分配不同的矩阵类型或越界访问向量和矩阵维度。为什么我没有收到编译时或运行时诊断?
答:uBLAS 区分调试模式(启用了大小和类型一致性检查,禁用表达式模板)和发布模式(禁用了大小和类型一致性检查,启用了表达式模板)。请检查 `cassert` 的预处理器符号 `NDEBUG` 是否已定义。`NDEBUG` 禁用了调试模式,而调试模式对于获取大小和类型一致性检查是必需的。

问:我编写了一些 uBLAS 基准测试来衡量矩阵链乘法(如 `prod (A, prod (B, C))`)的性能,并发现使用表达式模板会导致显著的性能下降。我该如何禁用表达式模板?
答:您不需要禁用表达式模板。请尝试通过 `prod (A,` `matrix_type (prod (B, C)))` 或 `prod (A, prod<`matrix_type > (B, C))` 来重新引入临时变量。

版权 (©) 2000-2011 Joerg Walter, Mathias Koch, Gunter Winkler, David Bellot
使用、修改和分发受 Boost 软件许可证 1.0 版的约束。(请参阅附带的 LICENSE_1_0.txt 文件或复制于 https://boost.ac.cn/LICENSE_1_0.txt)。