Как сгенерировать одну горячую кодировку для 40х10 классов? - PullRequest
0 голосов
/ 14 января 2020

У меня есть 40 классов, каждый из которых имеет 10 репликаций, мне нужно сгенерировать одну горячую кодировку, как показано ниже:

класс 1, репликация 1: [1 0 0 0 .... 40 (0) 1 0 0 0 0 .... 0 (10)] класс 1, репликация 2: [1 0 0 0 .... 40 (0) 0 1 0 0 0 .... 0 (10)]

Я не уверен, как я могу кодировать входной массив: например, код ниже всех классов находится в одном массиве:

 X = [2,1,2,3,3]'
   LinearIndices = sub2ind([length(X),3], [1:length(X)]', X); 
   tmp = zeros(length(X), 3); 
   tmp(LinearIndices) = 1

Приведенный выше код не работает, его генерировать: [1 00000 ... 0 (400)]

1 Ответ

1 голос
/ 14 января 2020

Вот, позвольте мне попытаться ответить на ваш вопрос так, как я его вижу, или, по крайней мере, указать вам направление. На мой взгляд, вы пытаетесь сделать две отдельные кодировки с одним горячим кодированием, а затем объединить их, поэтому давайте сделаем это так. Существует функция matlab ind2vec, которая выполняет горячее кодирование.

X = zeros(400,2);
X(:,1) = repelem(1:40, 10);
X(:,2) = repmat(1:10, 1,40);
encoding = [ind2vec(X(:,1)', 40)', ind2vec(X(:,2)', 10)'];
full(encoding)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...