使用特定列

时间:2016-06-14 17:23:10

标签: matlab

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

1 个答案:

答案 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;