問題
モデルが必要とするのは単語ではなく数値です。ワンホットエンコーディングは、各カテゴリをカテゴリごとに1つの位置を持つベクトルに変換します。そのカテゴリの位置が 1、それ以外はすべて 0 です。
カテゴリをアルファベット順に並べ、各ラベルについてワンホットベクトルを出力してください。
one_hot(labels) を実装してください。
入力
labels: カテゴリ名のリスト。
出力
ラベルごとに1行、異なるカテゴリごとに1列(アルファベット順)の行列を返してください。
制約
1 ≤ 長さ ≤ 1,000
各ラベルは 1 〜 20 文字
例
例 1
入力:
labels = ["red", "green", "blue", "green"]
期待される出力:
expected = [
[0, 0, 1],
[0, 1, 0],
[1, 0, 0],
[0, 1, 0]
]
入力:
std::vector<std::string> labels = {"red", "green", "blue", "green"};
期待される出力:
std::vector<std::vector<long long>> expected = {
{0, 0, 1},
{0, 1, 0},
{1, 0, 0},
{0, 1, 0}
};
入力:
string[] labels = new string[] {"red", "green", "blue", "green"};
期待される出力:
long[][] expected = new long[][] {
new long[] {0, 0, 1},
new long[] {0, 1, 0},
new long[] {1, 0, 0},
new long[] {0, 1, 0}
};
解説
アルファベット順のカテゴリは blue、green、red です。よって red → [0, 0, 1]、green → [0, 1, 0]、blue → [1, 0, 0] です。
例 2
入力:
labels = ["yes"]
期待される出力:
expected = [
[1]
]
入力:
std::vector<std::string> labels = {"yes"};
期待される出力:
std::vector<std::vector<long long>> expected = {
{1}
};
入力:
string[] labels = new string[] {"yes"};
期待される出力:
long[][] expected = new long[][] {
new long[] {1}
};
解説
カテゴリが1つだけなので、すべてのベクトルは [1] です。
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。