最終更新日時: 2024年03月12日 23時39分48秒 (JST)
yoh が更新

履歴 編集

function template
<linalg>

# std::linalg::scaled(C++26)

    namespace std::linalg {
      template<class ScalingFactor,
               class ElementType, class Extents, class Layout, class Accessor>
      constexpr auto scaled(ScalingFactor alpha, mdspan<ElementType, Extents, Layout, Accessor> x);
    }

## 概要

多次元配列ビュー`std::mdspan`に対して、要素値がスカラー倍された新しい多次元配列ビューを作る。

本操作により`mdspan`参照先メモリブロックが書き換えられることはなく、戻り値 `mdspan`を介した要素アクセス時にスケーリング係数の乗算が行われる。

## 戻り値

説明用の型`SA`を`scaled_accessor<ScalingFactor, Accessor>`として、次の値を返す。

    mdspan<typename SA::element_type, Extents, Layout, SA>(
      x.data_handle(), x.mapping(), SA(alpha, x.accessor()))

## 例

    #include <cassert>
    #include <linalg>
    #include <mdspan>

    int main()
    {
      int arr[] = {1, 2, 3, 4};
      std::mdspan vec0{arr, 4};
      // 1 2 3 4

      auto vec1 = std::linalg::scaled(2, vec0);
      // 2 4 6 8
      assert(vec1[0] == 2);

      // linalg::scaled適用後のmdspan要素は読み取り専用となり、
      // 例えば vec1[0] = 42; はコンパイルエラーを引き起こす。
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `mdspan`

## 参照

- P1673R13 A free function linear algebra interface based on the BLAS
- P1674R2: Evolving a Standard C++ Linear Algebra Library from the BLAS