# ワンホットから整数への変換 **ワンホットベクトル** とは、ちょうど1つの要素が1で残りがすべて0のバイナリベクトルです。 1の位置が整数値を符号化します。例えば、$(0,0,1,0)$ は整数2を表します。 :::{container} prog-cpp グローバル関数 `qbpp::onehot_to_int()` は整数配列中のワンホット符号化された行をデコードし、 1の位置を示す整数配列を返します。 ::: :::{container} prog-python グローバル関数 `qbpp.onehot_to_int()` は整数配列中のワンホット符号化された行をデコードし、 1の位置を示す整数配列を返します。 :::
## 基本的な使い方(2次元配列) サイズ $n \times m$ の2次元配列の場合、`onehot_to_int()` は各行をデコードし、$[0,m-1]$ の範囲の $n$ 個の整数からなる1次元配列を返します。行が有効なワンホットベクトルでない場合(つまり、ちょうど1つの1を含まない場合)、その行に対して $-1$ を返します。 :::{container} prog-cpp ```{literalinclude} ../../programFiles/cppPrograms/advanced/onehot-integer-program1.cpp :language: cpp :caption: onehot-integer-program1.cpp ``` ::: :::{container} prog-python ```{literalinclude} ../../programFiles/pythonPrograms/advanced/onehot-integer-program1.py :language: python :caption: onehot-integer-program1.py ``` ::: このプログラムは $5 \times 5$ の置換行列を定義し、それを順列にデコードします: ```{include} ../../programFiles/markDown/advanced/onehot-integer-program.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$ 個の整数を返す。 :::{container} prog-cpp ```{include} ../../programFiles/markDown/advanced/onehot-integer-program.md :start-after: :end-before: ``` ::: :::{container} prog-python ```{include} ../../programFiles/markDown/advanced/onehot-integer-program.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$ を返します。 :::{container} prog-cpp ```{include} ../../programFiles/markDown/advanced/onehot-integer-program.md :start-after: :end-before: ``` ::: :::{container} prog-python ```{include} ../../programFiles/markDown/advanced/onehot-integer-program.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 d_{n-1})$ | k | $d_k$ を除く全次元 | $[0,d_k-1]$ または $-1$ |