Namespaces
Variants

Basic linear algebra algorithms (since C++26)

From cppreference.net

基础线性代数算法基于密集基础线性代数子程序( BLAS ),其对应于 BLAS标准 的一个子集。这些访问数组元素的算法通过表示向量或矩阵的 std::mdspan 来访问这些元素。

BLAS算法被划分为三组称为 级别 的操作集,通常对应算法复杂度中多项式的次数:

  • BLAS 1 : 所有带有 std::mdspan 参数的算法,其 std::mdspan 数组访问次数和算术运算次数的量级,与任意 std::mdspan 参数各维度大小的最大乘积呈 线性 关系。这些算法包含点积、范数和向量加法等 向量 操作。
  • BLAS 2 : 所有算法具有 二次 时间的一般复杂度。这些算法包含矩阵-向量乘法及三角线性方程组求解等 矩阵-向量 操作。
  • BLAS 3 : 所有算法具有 三次 时间的一般复杂度。这些算法包含矩阵-矩阵乘法及多重三角线性方程组求解等 矩阵-矩阵 操作。

目录

就地变换

定义于头文件 <linalg>
定义于命名空间 std::linalg
std::mdspan 访问策略,其引用表示固定缩放因子与其嵌套 std::mdspan 访问器引用的乘积
(类模板)
std::mdspan 访问策略,其引用表示其嵌套 std::mdspan 访问器引用的复共轭
(类模板)
std::mdspan 布局映射策略,交换任何唯一布局映射策略的最右侧两个索引、范围及步长
(类模板)
(C++26)
返回新的只读 std::mdspan ,通过缩放因子与给定 std::mdspan 对应元素的逐元素乘积计算得出
(函数模板)
(C++26)
返回新的只读 std::mdspan ,其元素是给定 std::mdspan 对应元素的复共轭
(函数模板)
(C++26)
返回新的 std::mdspan ,表示通过给定 std::mdspan 输入矩阵的转置
(函数模板)
返回对象的共轭转置视图
(函数模板)

BLAS 1 函数

定义于头文件 <linalg>
定义于命名空间 std::linalg
生成平面旋转
(函数模板)
对向量应用平面旋转
(函数模板)
交换矩阵或向量的所有对应元素
(函数模板)
(C++26)
用标量逐元素乘法的结果覆盖矩阵或向量
(函数模板)
(C++26)
将矩阵或向量的元素复制到另一个中
(函数模板)
<span class="

注释

功能测试 标准 功能
__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 技术论坛