Matlab,整数向量转换为二进制矩阵而不使用循环

14
我有一个大小为N,所有元素均为1-M的向量。我想将其转换为一个NxM矩阵,每行仅包含一个元素设为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

有没有一种方法可以在不使用循环的情况下完成这个任务?


1
可能是创建指示矩阵Matlab/Octave 1-of-K表示法的重复问题。 - Amro
3个回答

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
线性索引可以通过另一种方式创建,而无需使用任何函数 idx = (y'-1)*m+(1:m)' 而不是 idx = sub2ind(size(y_vec),1:m,y); - Rahen Rangan

8
如果您有访问统计工具箱的权限,那么命令dummyvar可以完全实现这一点。
>> dummyvar([1 1 3])
ans =
     1     0     0
     1     0     0
     0     0     1

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接