1-К-кодирование в октаве - PullRequest
4 голосов
/ 05 ноября 2011

Я пытаюсь получить двоичное кодирование целочисленного вектора на единицу из K в октаве. У меня есть вектор y, скажем

y = [1 ; 2 ; 3 ; 1 ; 3]

а я хочу матрицу

Y = [1 0 0
     0 1 0
     0 0 1
     1 0 0
     0 0 1]

Я могу построить матрицу одного из K вручную

Y = [];
Y = [Y y == 1];
Y = [Y y == 2];
Y = [Y y == 3];

Но когда я пытаюсь построить его с помощью for цикла,

Y = [];
for i = unique(y),
    Y = [Y y == i];
endfor

что-то идет не так:

error: mx_el_eq: nonconformant arguments (op1 is 5x1, op2 is 3x1)

Я даже не понимаю сообщение об ошибке. Где моя ошибка?

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Я думаю, что есть способ сделать это без цикла:

Y = unique(y)(:,ones(1,size(y,1)))' == y(:,ones(size(unique(y),1),1))
2 голосов
/ 05 ноября 2011

Хорошо, нашел это. Я хотел бы, чтобы учебник сказал мне это.

Y = [];
for i = unique(y)',
%                ^
%  -------------/
    Y = [Y y == i];
end

По-видимому, for проходит по столбцам вектора слева направо, а unique возвращает вектор-столбец , поэтому "несоответствующие аргументы" y (5 × 1) и unique(y) (3 × 1).

...