【问题标题】:construct a matrix in Octave在 Octave 中构造一个矩阵
【发布时间】:2015-03-29 01:29:31
【问题描述】:

我有一个向量 idx = [3; 5个; 3; 4; 3; 2; 5个; 1]。该数字来自 1:k,k = 5。我想制作一个“k by m”矩阵 A(m 是向量 idx 中的元素数)。 A 的每一行包含“0”或“1”,其中“1”由向量 idx 的索引指示。例如,A (k = 3) 的第三行在第 1、3、5 列是“1”,因为这些是 idx 中“3”的索引。所以A =

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

如何在 Octave 中做到这一点?谢谢!

【问题讨论】:

    标签: matrix octave construction


    【解决方案1】:

    或者其他方式:

    idx = [3; 5; 3; 4; 3; 2; 5; 1];
    A = sparse (idx, [1:numel(idx)], 1)
    A =   Compressed Column Sparse (rows = 5, cols = 8, nnz = 8 [20%])
    (3, 1) ->  1
    (5, 2) ->  1
    (3, 3) ->  1
    (4, 4) ->  1
    (3, 5) ->  1
    (2, 6) ->  1
    (5, 7) ->  1
    (1, 8) ->  1
    

    这为您提供了一个压缩列稀疏(非常有效),您可以将其转换为“正常的完整矩阵”:

    B = full (A)
    B =
    
    0   0   0   0   0   0   0   1
    0   0   0   0   0   1   0   0
    1   0   1   0   1   0   0   0
    0   0   0   1   0   0   0   0
    0   1   0   0   0   0   1   0
    

    【讨论】:

      【解决方案2】:

      试试这个:

      idx = [3; 5; 3; 4; 3; 2; 5; 1];
      n = numel(idx);
      k = 5;
      A=zeros(k,n);
      
      A(sub2ind(size(A), idx, [1:n]')) = 1
      

      输出是:

      A =
      
         0   0   0   0   0   0   0   1
         0   0   0   0   0   1   0   0
         1   0   1   0   1   0   0   0
         0   0   0   1   0   0   0   0
         0   1   0   0   0   0   1   0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        • 2014-01-01
        • 2020-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多