【问题标题】:How to generate label matrix from a label vector? [duplicate]如何从标签向量生成标签矩阵? [复制]
【发布时间】:2014-12-08 08:28:31
【问题描述】:

我有一个标签向量如下:

   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

【问题讨论】:

  • 次要注意:副本适用于生成矩阵,其中 表示非零值。只需转置结果即可获得问题中所见的行矩阵。顺便说一句,感谢您链接到我的答案@Shai :)
  • @rayryeng 这里有很多线程实际上是相同的(我什至认为我已经回答了其中一个......),但恕我直言,这个问题是最“规范的”。
  • @Shai,谢谢!您提供的帖子确实是非常好的解决方案。因为当我发这个帖子的时候,我没有检查你的帖子,所以我做了这个重复的帖子。我已经关闭了这篇文章。当我们写下帖子的标题时,也许 stackoverflow 可以改进自然语言处理技术以提供最可取的建议。

标签: matlab


【解决方案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

【讨论】:

  • 就是这样!谢谢!
  • 但我建议您可以将unique 函数添加到您的答案中,因为y 向量可能没有标签2 或其他值。
  • @hubberwinston - 重复的答案可以处理标签丢失的情况。
  • @rayryeng,感谢您指出这一点。您提供的帖子是非常好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 2019-03-01
  • 2019-07-21
相关资源
最近更新 更多