有没有办法在 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
维度的向量,具有 1
到 10
的元素(表示),因此每个表示的计数都相等表示(即,将有 300
次 1
、300
次 2
等)。
我想做的是重写或创建一个新矩阵,该矩阵对所有出现的对应 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
有没有办法矢量化这段代码?
for k=1:K
vec_y(:,k) = y == k;
end
此处,y
是一个 3000x1
维度的向量,具有 1
到 10
的元素(表示),因此每个表示的计数都相等表示(即,将有 300
次 1
、300
次 2
等)。
我想做的是重写或创建一个新矩阵,该矩阵对所有出现的对应 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