y
是一个列向量,整数值表示标签号(例如1-3之间)。
现在我需要创建一个具有相同行数y
的矩阵。每行i
现在都是一个向量,其中y(i)
定位元素为1
,其他行为0
。
示例:
y = [3, 2, 2]';
x = [0,0,1;
0,1,0;
0,1,0];
是否有一种有效的方法来完成这项工作。我知道for循环会做:
x = zeros(size(y, 1), 3)
for i = 1:size(y, 1)
x(i, y(i)) = 1
end
答案 0 :(得分:3)
您可以使用sub2ind
轻松完成此操作,这会将下标转换为线性索引。您的行下标为1:numel(y)
,您的列下标为y
的值。
x = zeros(numel(y), max(y));
x(sub2ind(size(x), 1:numel(y), y(:).')) = 1;
或者您只需使用一点索引数学就可以做到这一点。
x = zeros(numel(y), max(y));
x(((y(:).' - 1) * numel(y)) + (1:numel(y))) = 1;