2016-10-17 166 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

相關問題