Math 倍频程1/K编码

Math 倍频程1/K编码,math,for-loop,matrix,octave,Math,For Loop,Matrix,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]; 但是当我尝试用for循环构造它时 Y = []; for i = unique(y), Y = [Y y == i]

我试图得到一个八度整数向量的二进制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];
但是当我尝试用
for
循环构造它时

Y = [];
for i = unique(y),
    Y = [Y y == i];
endfor
出了点问题:

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

我甚至不理解错误信息。我的错在哪里?好的,找到了。我希望教程告诉我这一点

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

显然,
for
从左到右循环遍历向量列,并且
unique
返回一个列向量,因此“非一致参数”是
y
(5×1)和
unique(y)
(3×1)。

我认为有一种方法可以在没有循环的情况下做到这一点:

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

谢谢你接电话。我把它改为y而不是t。可怜的旧八度音阶,迫使我们在缺乏jit的情况下,用过多的内存来换取性能。