Skip to content

Latest commit

 

History

History
151 lines (116 loc) · 5.08 KB

mapping.md

File metadata and controls

151 lines (116 loc) · 5.08 KB

mapping

  • linalg[meta header]
  • class template[meta id-type]
  • std::linalg[meta namespace]
  • layout_blas_packed[meta class]
  • cpp26[meta cpp]
namespace std::linalg {
  template<class Triangle, class StorageOrder>
  class layout_blas_packed {
    template<class Extents>
    struct mapping;
  };
}
  • layout_blas_packed[link ../layout_blas_packed.md]
  • Extents[link /reference/mdspan/extents.md]

概要

layout_blas_packed::mappingは、BLASにおける正方行列(square matrix)パックレイアウトと互換性のあるレイアウトマッピングを表現するクラスである。

layout_blas_packed<T, SO>::mapping<E>トリビアルコピー可能であり、regularのモデルである。

説明専用メンバ変数

layout_blas_packed::mappingクラステンプレートは、下記の説明専用メンバ変数を保持する。

適格要件

メンバ関数

構築・破棄

名前 説明 対応バージョン
(constructor) コンストラクタ C++26
(destructor) デストラクタ C++26
operator= コピー代入演算子 C++26

観測

名前 説明 対応バージョン
extents 多次元配列のサイズextents_を取得する C++26
required_span_size 要素アクセス範囲を取得する C++26
operator() 多次元配列インデクスから要素位置へ変換する C++26
stride 行列サイズ1x1ならば1 C++26
is_unique 行列サイズ1x1ならばtrue C++26
is_exhaustive trueを返す C++26
is_strided 行列サイズ1x1ならばtrue C++26

静的メンバ関数

名前 説明 対応バージョン
is_always_unique 行または列の静的要素数が1ならばtrue C++26
is_always_exhaustive trueを返す C++26
is_always_strided is_always_unique() C++26

メンバ型

名前 説明 対応バージョン
extents_type Extents C++26
index_type Extents::index_type C++26
size_type Extents::size_type C++26
rank_type Extents::rank_type C++26
layout_type layout_blas_packed C++26

非メンバ(Hidden friends)関数

比較演算子

名前 説明 対応バージョン
operator== 等値比較 C++26
operator!= 非等値比較 (==により使用可能) C++26

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

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

  // 行優先格納順の上三角要素から3x3対称行列を構築
  using Ext2D = std::dextents<size_t, 2>;
  using LayoutPacked = linalg::layout_blas_packed<linalg::upper_triangle_t, linalg::row_major_t>;
  using Mapping = LayoutPacked::mapping<Ext2D>;
  std::mdspan mat{arr, Mapping{Ext2D{3, 3}}};
  // 1 2 3
  // - 4 5
  // - - 6

  for (size_t i = 0; i < mat.extent(0); i++) {
    for (size_t j = 0; j < mat.extent(1); j++) {
      std::print(" {}", mat[i, j]);
    }
    std::println("");
  }
}
  • linalg::layout_blas_packed[color ff0000]
  • LayoutPacked::mapping[color ff0000]
  • mat.extent[link /reference/mdspan/mdspan/extent.md]
  • std::print[link /reference/print/print.md]
  • std::println[link /reference/print/println.md]

出力

 1 2 3
 2 4 5
 3 5 6

バージョン

言語

  • C++26

処理系

関連項目

参照