有没有办法在 matlab/octave 中矢量化这段代码?

Is there a way to vectorize this code piece in matlab / octave?

有没有办法矢量化这段代码?

for k=1:K
    vec_y(:,k) = y == k;
end

此处,y 是一个 3000x1 维度的向量,具有 110 的元素(表示),因此每个表示的计数都相等表示(即,将有 30013002 等)。

我想做的是重写或创建一个新矩阵,该矩阵对所有出现的对应 1-10:

具有以下二进制表示

1 将由 [1;0;0;0;0;0;0;0;0;0] 表示,2 将由 [0;1;0;0;0;0;0;0;0;0] 表示,依此类推。

我想在不使用 for 循环的情况下完全矢量化代码。

编辑: @Suever

建议

一种可能:

% Sample y values
y = [1;9;5;6;3]

% Resulting matrix
m = bsxfun(@eq, 1:10, y)

m =

     1     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     1     0
     0     0     0     0     1     0     0     0     0     0
     0     0     0     0     0     1     0     0     0     0
     0     0     1     0     0     0     0     0     0     0