【问题标题】:matlab encoding integers to matrix of vectors of 0's and 1's [duplicate]matlab将整数编码为0和1的向量矩阵[重复]
【发布时间】:2026-01-25 10:30:02
【问题描述】:

我有一个从 0 到 10 的 1118x1 向量:
5
5
3
4
7
4
1
.
.
我需要将每个值编码为 11x1118 零矩阵,其中第 k+1 个值为 1。
例如,第一个值为 5,因此第一列中的 5+1=6 值为 1
0
0
0
0
0
1
0
0
0
0
0
我需要对不超过 1118 的所有值执行此操作。
我假设我只需要一个 for 循环,但完全不知道该怎么做

【问题讨论】:

    标签: matlab encoding


    【解决方案1】:

    您可以使用例如sub2ind。试试下面的代码:

    x = [4;3;1;1;4;7];
    y = zeros(11,numel(x));
    y(sub2ind(size(y),x+1,(1:numel(x))')) = 1
    
    y =
    
         0     0     0     0     0     0
         0     0     1     1     0     0
         0     0     0     0     0     0
         0     1     0     0     0     0
         1     0     0     0     1     0
         0     0     0     0     0     0
         0     0     0     0     0     0
         0     0     0     0     0     1
         0     0     0     0     0     0
         0     0     0     0     0     0
         0     0     0     0     0     0
    

    【讨论】:

      【解决方案2】:

      或使用循环的直接方法:

      v = [5 5 3 4 7 4 1...]; # your vector
      M = zeros(11, length(v)); # the final matrix
      for i = 1:length(v)
          e = v(i);
          M(e + 1, i) = 1;
      end
      

      【讨论】:

        最近更新 更多