# ワンホットから整数への変換 :::{container} prog-cpp **ワンホットベクトル** とは,ちょうど1つの要素が1で残りがすべて0のバイナリベクトルです. 1の位置が整数値を符号化します. 例えば,$\{0,0,1,0\}$ は整数2を表します. グローバル関数 **`qbpp::onehot_to_int()`** は整数配列中のワンホット符号化された行をデコードし, 1の位置を示す整数配列を返します. ### 基本的な使い方(2次元配列) サイズ $n \times m$ の2次元配列の場合,`onehot_to_int()` は各行をデコードし, $[0, m-1]$ の範囲の $n$ 個の整数からなる1次元配列を返します. 行が有効なワンホットベクトルでない場合(つまり,ちょうど1つの1を含まない場合), その行に対して $-1$ を返します. ```{literalinclude} /../programFiles/cppPrograms/advanced/onehot-integer-program1.cpp :language: cpp :caption: onehot-integer-program1.cpp ``` このプログラムは $5 \times 5$ の置換行列を定義し,それを順列にデコードします: ```{include} /../programFiles/markDown/advanced/onehot-integer.md :start-after: :end-before: ``` ### 軸の指定 デフォルトでは,`onehot_to_int()` は最後の軸(`axis=-1`)に沿ってデコードします. **`onehot_to_int(arr, axis)`** で任意の軸を指定できます. 負のインデックスもサポートされています: 軸 `-1` は最後の軸,`-2` は最後から2番目の軸を指します. サイズ $n \times m$ の2次元配列の場合: - **`onehot_to_int(arr)`** または **`onehot_to_int(arr, 1)`**: 各行をデコード,$[0, m-1]$ の $n$ 個の整数を返す. - **`onehot_to_int(arr, 0)`**: 各列をデコード,$[0, n-1]$ の $m$ 個の整数を返す. ```{include} /../programFiles/markDown/advanced/onehot-integer.md :start-after: :end-before: ``` `x` が置換行列の場合,`onehot_to_int(sol(x))` は順列 $\sigma$ を, `onehot_to_int(sol(x), 0)` はその逆順列 $\sigma^{-1}$ を返します. ### 1次元入力 サイズ $m$ の1次元配列の場合,`onehot_to_int()` は単一の整数(1の位置)を返します. 入力が有効なワンホットベクトルでない場合は $-1$ を返します. ```{include} /../programFiles/markDown/advanced/onehot-integer.md :start-after: :end-before: ``` ### 高次元配列 次元 $d \geq 3$ の配列の場合,`onehot_to_int()` は指定された軸に沿ってデコードし, 次元 $d - 1$ の配列を返します. 例えば,$2 \times 3 \times 4$ の配列の場合: - **`onehot_to_int(arr)`** または **`onehot_to_int(arr, 2)`**: 軸2(最後)に沿ってデコード,結果の形状 $2 \times 3$. - **`onehot_to_int(arr, 1)`**: 軸1に沿ってデコード,結果の形状 $2 \times 4$. - **`onehot_to_int(arr, 0)`**: 軸0に沿ってデコード,結果の形状 $3 \times 4$. ### まとめ | 入力形状 | 軸 | 出力形状 | 値の範囲 | |------------------|------|--------------|---------------| | $(m)$ | — | スカラー | $[0, m-1]$ または $-1$ | | $(d_0 \times \cdots \times d_{n-1})$ | $k$ | $d_k$ を除く全次元 | $[0, d_k-1]$ または $-1$ | ::: :::{container} prog-python **ワンホットベクトル** とは,ちょうど1つの要素が1で残りがすべて0のバイナリベクトルです. 1の位置が整数値を符号化します. 例えば,`[0, 0, 1, 0]` は整数2を表します. グローバル関数 **`qbpp.onehot_to_int()`** は整数配列中のワンホット符号化された行をデコードし, 1の位置を示す整数配列を返します. ### 基本的な使い方(2次元配列) サイズ $n \times m$ の2次元配列の場合,`onehot_to_int()` は各行をデコードし, $[0, m-1]$ の範囲の $n$ 個の整数からなる1次元配列を返します. 行が有効なワンホットベクトルでない場合(つまり,ちょうど1つの1を含まない場合), その行に対して $-1$ を返します. ```{literalinclude} /../programFiles/pythonPrograms/advanced/onehot-integer-program1.py :language: python :caption: onehot-integer-program1.py ``` このプログラムは $5 \times 5$ の置換行列を定義し,それを順列にデコードします: ```{include} /../programFiles/markDown/advanced/onehot-integer.md :start-after: :end-before: ``` ### 軸の指定 デフォルトでは,`onehot_to_int()` は最後の軸(`axis=-1`)に沿ってデコードします. **`onehot_to_int(arr, axis)`** で任意の軸を指定できます. 負のインデックスもサポートされています: 軸 `-1` は最後の軸,`-2` は最後から2番目の軸を指します. サイズ $n \times m$ の2次元配列の場合: - **`onehot_to_int(arr)`** または **`onehot_to_int(arr, axis=1)`**: 各行をデコード,$[0, m-1]$ の $n$ 個の整数を返す. - **`onehot_to_int(arr, axis=0)`**: 各列をデコード,$[0, n-1]$ の $m$ 個の整数を返す. ```{include} /../programFiles/markDown/advanced/onehot-integer.md :start-after: :end-before: ``` `x` が置換行列の場合,`onehot_to_int(sol(x))` は順列 $\sigma$ を, `onehot_to_int(sol(x), axis=0)` はその逆順列 $\sigma^{-1}$ を返します. ### 1次元入力 サイズ $m$ の1次元配列の場合,`onehot_to_int()` は1の位置を含む単一要素配列を返します. 入力が有効なワンホットベクトルでない場合は $-1$ を返します. ```{include} /../programFiles/markDown/advanced/onehot-integer.md :start-after: :end-before: ``` ### 高次元配列 次元 $d \geq 3$ の配列の場合,`onehot_to_int()` は指定された軸に沿ってデコードし, 次元 $d - 1$ の配列を返します. 例えば,$2 \times 3 \times 4$ の配列の場合: - **`onehot_to_int(arr)`** または **`onehot_to_int(arr, axis=2)`**: 軸2(最後)に沿ってデコード,結果の形状 $2 \times 3$. - **`onehot_to_int(arr, axis=1)`**: 軸1に沿ってデコード,結果の形状 $2 \times 4$. - **`onehot_to_int(arr, axis=0)`**: 軸0に沿ってデコード,結果の形状 $3 \times 4$. ### まとめ | 入力形状 | 軸 | 出力形状 | 値の範囲 | |------------------|------|--------------|---------------| | $(m)$ | — | $(1)$ | $[0, m-1]$ または $-1$ | | $(d_0 \times \cdots \times d_{n-1})$ | $k$ | $d_k$ を除く全次元 | $[0, d_k-1]$ または $-1$ | :::