Boost C++ 库

...全球备受推崇且设计精湛的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ Coding Standards

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 月),有许多优秀的矩阵库可用,例如 MTL4、armadillo、eigen。uBLAS 提供了一套稳定、经过充分测试的向量和矩阵类、线性代数的典型运算以及三角方程组的求解器。uBLAS 提供稠密、结构化和稀疏矩阵,它们都使用类似的接口。最后,uBLAS 提供了良好的(但不是出色的)性能。另一方面,uBLAS 的最后一次重大改进是在 2008 年,自 2009 年以来没有进行过重大更改。因此,人们应该问自己一些问题来帮助决策:*可用性?* uBLAS 是 boost 的一部分,因此在许多环境中都可用。*易用性?* uBLAS 对于简单的事情很容易使用,但当你偏离常规时,需要扎实的 C++ 知识。*性能?* 有更快的替代方案。*前沿?* uBLAS 已有十多年历史,错过了 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 Software License Version 1.0 的约束。(请参阅随附的 LICENSE_1_0.txt 文件或访问 https://boost.ac.cn/LICENSE_1_0.txt 复制)。