基本线性代数算法 (C++26 起)
来自cppreference.com
基本线性代数算法基于密集的基础线性代数子程序(BLAS),相当于 BLAS 标准 的一个子集。这些算法通过代表向量或矩阵的数组视图 std::mdspan 来访问元素。
BLAS 算法分为称为“级别”的三类操作,它们通常对应于算法复杂度中的多项式的次数:
- BLAS 1:所有使用 std::mdspan 参数的算法都会对 std::mdspan 数组的访问和算术运算进行计数,这些运算的数量与任何 std::mdspan 参数的范围的最大乘积成线性。这些算法包含了诸如点积、范数和向量加法等“向量”操作。
- BLAS 2:所有的算法的一般复杂度都为二次方 时间。这些算法包含了“矩阵-向量”操作,例如矩阵-向量乘法和三角线性系统的求解器。
- BLAS 3:所有的算法的一般复杂度都为三次方 时间。这些算法包含了“矩阵-矩阵”操作,例如矩阵-矩阵乘法和多三角线性系统的求解器。
原位转换 | ||
在标头 <linalg> 定义 | ||
在命名空间 std::linalg 定义 | ||
(C++26) | std::mdspan 访问器策略,其引用表示一个固定缩放因数和其嵌套 std::mdspan 访问器的引用的乘积 (类模板) | |
(C++26) | std::mdspan 访问器策略,其引用代表的是其嵌套 std::mdspan 访问器的引用的复共轭 (类模板) | |
(C++26) | std::mdspan 布局映射策略,交换任意唯一布局映射策略的最右侧两套索引、尺度和步长 (类模板) | |
(C++26) | 返回新的只读 std::mdspan,逐元素计算缩放因子和给定 std::mdspan 的相应元素的乘积 (函数模板) | |
(C++26) | 返回新的只读 std::mdspan,其各元素为给定 std::mdspan 对象的对应元素的复共轭 (函数模板) | |
(C++26) | 返回表示给定 std::mdspan 的输入矩阵的转置的新 std::mdspan (函数模板) | |
(C++26) | 返回对象的共轭转置视图 (函数模板) | |
BLAS 1 函数 | ||
在标头 <linalg> 定义 | ||
在命名空间 std::linalg 定义 | ||
(C++26) | 产生平面旋转 (函数模板) | |
(C++26) | 应用平面旋转到向量 (函数模板) | |
(C++26) | 交换矩阵或向量的全部对应元素 (函数模板) | |
(C++26) | 以计算矩阵或向量和一个标量的逐元素相乘的结果对它覆写 (函数模板) | |
(C++26) | 复制矩阵或向量的各元素给另一个 (函数模板) | |
(C++26) | 按元素添加向量或矩阵 (函数模板) | |
(C++26) | 返回两个向量的非共轭点积 (函数模板) | |
(C++26) | 返回两个向量的共轭点积 (函数模板) | |
(C++26) | 返回缩放的向量各元素平方和 (函数模板) | |
(C++26) | 返回向量的欧氏范数 (函数模板) | |
(C++26) | 返回向量各元素绝对值的和 (函数模板) | |
(C++26) | 返回向量各元素最大绝对值的索引 (函数模板) | |
(C++26) | 返回矩阵的弗罗贝尼乌斯范数 (函数模板) | |
(C++26) | 返回矩阵的 1-范数 (函数模板) | |
(C++26) | 返回矩阵的 ∞-范数 (函数模板) | |
BLAS 2 函数 | ||
在标头 <linalg> 定义 | ||
在命名空间 std::linalg 定义 | ||
(C++26) | 计算矩阵-向量乘积 (函数模板) | |
计算对称矩阵-向量乘积 (函数模板) | ||
计算厄米特矩阵-向量乘积 (函数模板) | ||
计算三角矩阵-向量乘积 (函数模板) | ||
求解三角线性系统 (函数模板) | ||
(C++26) | 实施矩阵的非对称非共轭秩-1 更新 (函数模板) | |
(C++26) | 实施矩阵的非对称共轭秩-1 更新 (函数模板) | |
实施对称矩阵的秩-1 更新 (函数模板) | ||
实施厄米特矩阵的秩-1 更新 (函数模板) | ||
实施对称矩阵的秩-2 更新 (函数模板) | ||
实施厄米特矩阵的秩-2 更新 (函数模板) | ||
BLAS 3 函数 | ||
在标头 <linalg> 定义 | ||
在命名空间 std::linalg 定义 | ||
(C++26) | 计算矩阵-矩阵乘积 (函数模板) | |
(C++26) | 计算对称矩阵-矩阵乘积 (函数模板) | |
(C++26) | 计算厄米特矩阵-矩阵乘积 (函数模板) | |
计算三角矩阵-矩阵乘积 (函数模板) | ||
实施对称矩阵的秩-k 更新 (函数模板) | ||
实施厄米特矩阵的秩-k 更新 (函数模板) | ||
实施对称矩阵的秩-2k 更新 (函数模板) | ||
实施厄米特矩阵的秩-2k 更新 (函数模板) | ||
求解多重三角线性系统 (函数模板) | ||
帮助项 | ||
在标头 <linalg> 定义 | ||
在命名空间 std::linalg 定义 | ||
描述具有 linalg::layout_blas_packed 布局的 std::mdspan 的元素顺序 (标签) | ||
指定算法和矩阵的其他使用方应当访问矩阵的上三角还是下三角 (标签) | ||
指定算法是否应当访问矩阵的对角线项 (标签) | ||
(C++26) | std::mdspan 布局映射策略,表示仅存储一个三角形中的各项的方阵,以打包连续格式存储 (类模板) |
[编辑]注解
功能特性测试宏 | 值 | 标准 | 功能特性 |
---|---|---|---|
__cpp_lib_linalg | 202311L | (C++26) | 基本线性代数算法(BLAS) |
[编辑]示例
运行此代码
#include <cassert>#include <cstddef>#include <execution>#include <linalg>#include <mdspan>#include <numeric>#include <vector> int main(){std::vector<double> x_vec(42); std::ranges::iota(x_vec, 0.0); std::mdspan x(x_vec.data(), x_vec.size()); // x[i] *= 2.0,顺序执行 std::linalg::scale(2.0, x); // x[i] *= 3.0,并行执行 std::linalg::scale(std::execution::par_unseq, 3.0, x); for(std::size_t i{}; i != x.size();++i)assert(x[i]==6.0*static_cast<double>(i));}
[编辑]外部链接
1. | BLAS 主页 |
2. | BLAS 技术论坛 |