Matlab,整数向量到二进制矩阵无循环

Zet*_*Two 14 matlab matrix

我有一个带有N个元素的向量,所有整数都是1-M.我想将其转换为NxM矩阵,每行只包含零,除了i:th元素设置为1,i是向量中的整数.

例如:[1 1 3] => [1 0 0; 1 0 0; 0 0 1]

我目前在循环中执行此操作,如下所示:

y_vec = zeros(m, num_labels);
for i = 1:m
    y_vec(i, y(i)) = 1;
end
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有循环的情况下做到这一点?

Jon*_*nas 13

就在这里:

y = [1 1 3];
m = length(y);
num_labels = max(y);

%# initialize y_vec
y_vec = zeros(m,num_labels);

%# create a linear index from {row,y}
idx = sub2ind(size(y_vec),1:m,y);

%# set the proper elements of y_vec to 1
y_vec(idx) = 1;
Run Code Online (Sandbox Code Playgroud)


Sam*_*rts 8

如果您可以访问Statistics Toolbox,则命令就是dummyvar这样做的.

>> dummyvar([1 1 3])
ans =
     1     0     0
     1     0     0
     0     0     1
Run Code Online (Sandbox Code Playgroud)