我有一个包含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
有没有办法在没有循环的情况下做到这一点?
答案 0 :(得分: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;
答案 1 :(得分:8)
如果您有权访问Statistics Toolbox,则命令dummyvar
就是这样做的。
>> dummyvar([1 1 3])
ans =
1 0 0
1 0 0
0 0 1
答案 2 :(得分:3)
(已在Creating Indicator Matrix和Matlab/Octave 1-of-K representation中提出此问题。)
我最喜欢的答案是woodchips' sparse(1:n,labels,1,n,m);
。