2011-11-05 2 views
4

J'essaie d'obtenir un codage binaire un-de-K d'un vecteur entier dans Octave. J'ai un vecteur y, direCodage 1-of-K dans Octave

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

et je veux une matrice

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

Je peux construire l'un de K-matrice à la main avec

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

Mais quand J'essaie de le construire avec une boucle for,

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

quelque chose va mal:

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

Je ne comprends même pas le message d'erreur. Où est mon erreur?

Répondre

2

D'accord, je l'ai trouvé. Je voudrais que le tutoriel m'ait dit ceci.

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

Apparemment, for boucles à travers les colonnes d'un vecteur de gauche à droite et unique renvoie un vecteur de colonne , de sorte que les "arguments nonconformant" sont y (5 × 1) et unique(y) (3 × 1).

3

Je pense qu'il ya un moyen de le faire sans une boucle:

Y = unique(y)(:,ones(1,size(y,1)))' == y(:,ones(size(unique(y),1),1)) 
+0

J'obtiens 'erreur: « t » undefined' ... –

+0

Merci pour la capture que. Je l'ai corrigé pour dire y au lieu de t. – Devin

+0

Pauvre vieille Octave, nous obligeant à échanger de l'utilisation excessive de la mémoire pour la performance, en l'absence d'un jit. –