如何从标签向量生成标签矩阵?

时间:2014-12-08 08:28:32

标签: matlab

我有一个标签向量如下:

   y=[3 1 5 3 4 2];

有没有有效的方法来生成以下标签矩阵?

    [0 0 1 0 0;
     1 0 0 0 0;
     0 0 0 0 1;
     0 0 1 0 0;
     0 0 0 1 0;
     0 1 0 0 0;]

更新: This postthis post都是很好的答案。使用@Nras提供的脚本,以下是处理缺少的标签:

    Y=[3 1 5 3 4 2];
    labels=unique(Y);
    [~,indexes]=ismember(Y,labels);
    rows = 1:length(Y); %// row indx
    T = zeros(length(Y),length(unique(indexes))); %// A matrix full of zeros
    T(sub2ind(size(T),rows ,indexes)) = 1; %// Ones at the desired row/column combinations

1 个答案:

答案 0 :(得分:1)

使用sub2ind解决此问题。您的y确定要使用的列, 行总是递增1.通过使用sub2ind,所需的行列组合转换为线性索引,然后可以以矢量化方式进行处理。

y = [3 1 5 3 4 2]; %// column indx
rows = 1:length(y); %// row indx

M = zeros(length(y), max(y)); %// A matrix full of zeros
M(sub2ind(size(M),rows ,y)) = 1; %// Ones at the desired row/column combinations