【问题标题】:Creating an m by n matrix of 0s and 1s from m-sized vector of column indexes从 m 大小的列索引向量创建一个由 0 和 1 组成的 m x n 矩阵
【发布时间】:2012-05-19 12:28:47
【问题描述】:

我有一个 m 维的整数向量,范围从 1 到 n。这些整数是 m × n 矩阵的列索引。

我想创建一个由 0 和 1 组成的 m × n 矩阵,其中在第 m 行中,由 指定的列中有一个 1我的向量中的第 m 个值。

例子:

% my vector (3-dimensional, values from 1 to 4):
v = [4;
     1;
     2];

% corresponding 3 × 4 matrix
M = [0 0 0 1;
     1 0 0 0;
     0 1 0 0];

如果没有 for 循环,这可能吗?

【问题讨论】:

    标签: matlab matrix octave


    【解决方案1】:

    当然,这就是他们发明sparse矩阵的原因:

    >> M = sparse(1:length(v),v,ones(length(v),1))
    M =
    
       (2,1)        1
       (3,2)        1
       (1,4)        1
    

    如果需要,可以使用 full 将其转换为完整矩阵:

    >> full(M)
    ans =
    
         0     0     0     1
         1     0     0     0
         0     1     0     0
    

    【讨论】:

      【解决方案2】:

      或者没有稀疏矩阵:

      >> M = zeros(max(v),length(v));
      >> M(v'+[0:size(M,2)-1]*size(M,1)) = 1;
      >> M = M'
      
      M =
      
       0     0     0     1
       1     0     0     0
       0     1     0     0
      

      使用转置是因为在 matlab 中数组是按列寻址的

      【讨论】:

        【解决方案3】:

        在 Octave 中,至少从 3.6.3 开始,您可以使用广播轻松做到这一点:

        M = v==1:4
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-24
          • 1970-01-01
          • 2020-11-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多