我试图在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)
我甚至不理解错误信息。哪里是我的错?
答案 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)。