# ワンホットから整数への変換
**ワンホットベクトル** とは、ちょうど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$ |