2016-10-17 4 views
0

このコードをベクトル化する方法はありますか?ここmatlab/octaveでこのコードをベクトル化する方法はありますか?

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

y(すなわち、1300カウント300カウントが存在することになる各表現が他のすべての表現として同じ数を有するよう3000x1次元のベクトルであり、要素10(表現)を介し1を有します2など)。

書き換えるか、単に1対応のすべての出現のために、以下のバイナリ表現された新しいマトリックスの作成である私がやりたいこと - 10を:[1;0;0;0;0;0;0;0;0;0]で表現されます

1を、2[0;1;0;0;0;0;0;0;0;0]こと、そしてそうしますに。

forループを使用せずにコードを完全にベクトル化したいです。

答えて

3

EDIT: @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

関連する問題