最終更新日時(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は、0でない成分だけを配列で過不足なく持つ三角行列を表す、多次元配列ビューmdspanレイアウトマッピングポリシークラスであり、BLASにおけるパックレイアウトと互換性がある。

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

適格要件

メンバ型

名前 説明 対応バージョン
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", mat1);

  // 行優先格納順の下三角要素から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

処理系

関連項目

参照