最終更新日時(UTC):
が更新

履歴 編集

class template
<linalg>

std::linalg::layout_blas_packed(C++26)

namespace std::linalg {
  template<class Triangle, class StorageOrder>
  class layout_blas_packed;
}

概要

layout_blas_packedは、多次元配列ビューmdspanを用いた正方行列(square matrix)に対して、BLASにおけるパックレイアウトと互換性のある行列要素メモリ配置を表現するレイアウトマッピングポリシークラスである。

  • Triangle : 指定する行列要素の種別を、上三角upper_triangle_tまたは下三角lower_triangle_tから指定する。
  • StorageOrder : 行列要素の格納順を、列優先column_major_tまたは行優先row_major_tから指定する。

layout_blas_packedを用いて、BLASの Symmetric Packed (SP), Hermitian Packed (HP), Triangular Packed (TP) で利用される行列レイアウトを表現できる。

適格要件

  • Triangleupper_triangle_tまたはlower_triangle_tのいずれか
  • StorageOrdercolumn_major_tまたはrow_major_tのいずれか

メンバ型

名前 説明 対応バージョン
triangle_type Triangle C++26
storage_order_type StorageOrder C++26
mapping レイアウトマッピング (class template) C++26

#include <linalg>
#include <mdspan>
#include <print>
#include <string_view>
namespace linalg = std::linalg;

// 行列(matrix)の要素表示
template <class T, class E, class L, class A>
void print_mat(std::string_view name, const std::mdspan<T, E, L, A>& mat)
{
  static_assert(mat.rank() == 2);
  std::println("{}:", name);
  for (size_t i = 0; i < mat.extent(0); ++i) {
    for (size_t j = 0; j < mat.extent(1); ++j) {
      std::print(" {:2}", mat[i, j]);
    }
    std::println("");
  }
}

int main()
{
  double arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  // 列優先格納順の下三角要素から4x4対称行列を構築
  std::mdspan<
    double,
    std::extents<size_t, 4, 4>,
    linalg::layout_blas_packed<linalg::lower_triangle_t, linalg::column_major_t>
  > mat1{arr};
  // 1 - -  -
  // 2 5 -  -
  // 3 6 8  -
  // 4 7 9 10
  print_mat("mat1", mat);

  // 行優先格納順の下三角要素から4x4対称行列を構築
  std::mdspan<
    double,
    std::extents<size_t, 4, 4>,
    linalg::layout_blas_packed<linalg::lower_triangle_t, linalg::row_major_t>
  > mat2{arr};
  // 1 - -  -
  // 2 3 -  -
  // 4 5 6  -
  // 7 8 9 10
  print_mat("mat2", mat2);
}

出力

mat1:
  1  2  3  4
  2  5  6  7
  3  6  8  9
  4  7  9 10
mat2:
  1  2  4  7
  2  3  5  8
  4  5  6  9
  7  8  9 10

バージョン

言語

  • C++26

処理系

関連項目

参照