令和8年度試験問題 科目B 問5

 次のプログラム中のabに入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。

 一つの要素だけが1で他の要素が0であるような整数型の配列による表現を,本問ではOne-Hot表現という。関数 oneHotEncoding は,図のように,色の名前が格納されている要素数1以上の文字列型の配列を引数として受け取り,配列に含まれる色の名前(図の例では3種類)に基づいて,各要素をOne-Hot表現に変換し,整数型配列の配列に格納して返す。関数 oneHotEncoding における変換の例を図に示す。
b05_1.png
〔プログラム〕
b05_2.png

b05_3.png
正解 問題へ
分野:アルゴリズムとプログラミング
細目:プログラミングの諸分野への適用
解説
One-Hot表現とは、分類の対象となる種類ごとに要素を一つ用意し、該当する種類の位置だけを1、その他の位置を0にする表現方法です。

このプログラムは、大きく二つの処理に分かれています。
  • 引数の配列 colors に含まれる色の種類を colorVector に一つずつ格納する
  • colors の各要素を、colorVector を基準にOne-Hot表現へ変換する
aについて〕
最初の繰返し処理では、引数 colors に含まれる色を一つずつ調べ、重複しないように colorVector へ格納します。ループ変数iは、現在調べている colors の要素番号を表します。

最初に colors[1] の"Red"を調べます。colorVector は空なので、"Red"をその末尾に追加します。続く"Green"と"Blue"もまだ colorVector に格納されていないため、それぞれ追加します。最後の colors[4] の"Red"は、既に colorVector に格納されています。そのため、追加は行いません。

この処理によって、colorVector の内容は次のようになります。
{"Red", "Green", "Blue"}
colorVector に追加すべきは色名、すなわち現在の要素の値である colors[i] です。

ここで"未定義の値"を追加すると、colorVector に色名が格納されず、後の処理で colors の要素と比較できません。

よって、空欄aには colors[i]の値 が当てはまります。

bについて〕
次の繰返し処理では、colorsの各要素をOne-Hot表現へ変換します。

外側のfor文は colors の要素の数だけ繰返し、内側のfor文は colorVector の要素の数だけ繰返します。つまり、colors の要素一つずつに対して、colorVector の各要素を照合する形になります。

外型のfor文で使われるループ変数jは、現在、変換対象としている colors の要素番号、内側の繰返しで使われる変数kは、colorVector の要素番号を示します。例えば、colors[j]が"Green"の場合、colorVector の各要素と次のように順番に比較が行われます。
colors[j]:"Green"
colorVector[1]:"Red" → 一致しないので0
colorVector[2]:"Green" → 一致するので1
colorVector[3]:"Blue" → 一致しないので0
この結果、"Green"のOne-Hot表現として、次の配列が作られます。
{0, 1, 0}
上記のように、現在の要素の色名 colors[j] と colorVector[k] を比較し、等しければ1を、異なっていれば0を追加するのが適切な動作です。空欄bには"1"を追加すべき条件式が入るため、colors[j] = colorVector[k] が当てはまります。

もう一方の選択肢である「colorsの要素のいずれかにcolorVector[k]の値が格納されている」という条件では、条件式は常にtrueとなり、適切なOne-Hot表現にはなりません。

よって、空欄bには colors[j]がcolorVector[k]と等しい が当てはまります。

以上より、正しい組合せは次のとおりです。
  • a:colors[i]の値
  • b:colors[j]がcolorVector[k]と等しい
したがって「イ」が適切です。

Pagetop