Matlab,整数向量到二元矩阵没有循环

时间:2011-11-14 03:30:06

标签: 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

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

3 个答案:

答案 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 MatrixMatlab/Octave 1-of-K representation中提出此问题。)

我最喜欢的答案是woodchips' sparse(1:n,labels,1,n,m);