2011-11-05 66 views
4

我试图在Octave中得到一个整数矢量的二进制K编码。我有一个向量y,说Octave中的1-K编码

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

,我想一个矩阵

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

我可以通过手

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

但是,当构建一个-的-K矩阵我试图用for循环构造它,

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

不顺心的事:

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

我甚至不明白的错误消息。我的错误在哪里?

回答

2

好的,找到它了。我希望教程告诉我这一点。

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

显然,for循环通过一个矢量的从左至右和unique返回列向量,因此, “不符合标准参数” 是y(5×1)和unique(y)(3× 1)。

3

我认为有办法做到这一点没有一个循环:

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

我得到'错误:“T” undefined' ... –

+0

感谢没收。我纠正它说y而不是t。 – Devin

+0

糟糕的旧八度,迫使我们交易过度的记忆使用表现,在没有jit的情况下。 –