八度中的1-K编码

时间:2011-11-05 13:15:57

标签: math for-loop matrix octave

我试图在Octave中获得整数向量的二进制K-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 个答案:

答案 0 :(得分:3)

我认为没有循环可以做到这一点:

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

答案 1 :(得分:2)

好的,找到了。我希望教程告诉我这个。

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

显然,for从左到右循环遍历向量的unique返回列向量,因此“不符合”参数“是y(5×1)和unique(y)(3×1)。