2016-10-17 106 views
0

有没有一种方法可以将这段代码向量化?有没有办法在matlab/octave中矢量化这段代码?

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

这里,y3000x1维的向量,并具有元件1通过10(表示),使得每个表示具有相等计数作为每一个其他表示(即,会出现的1300计数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循环。

回答

3

编辑:通过@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 
+0

其实你不因为你在使用'bsxfun'需要'repmat'。你可以写'bsxfun(@eq,1:10,y)' – Suever

+0

谢谢,我会编辑我的答案! –

+0

它运作良好。谢谢!不幸的是我不能投票你的答案,因为我没有要求的声望/点。 :) – Arean

相关问题