- 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 |
#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]