【问题标题】:octave use vector as columns index for a matrixoctave 使用向量作为矩阵的列索引
【发布时间】:2018-08-31 15:31:57
【问题描述】:

我有一个向量 y = [1; 1; 2; 3] 和一个矩阵 Y = zeros(4, 3)。 我需要将Y 中与向量y 的值相对应的列设置为1。即

Y = [1, 0, 0; 1, 0, 0; 0, 1, 0; 0, 0, 1]

Y(y) 或 Y(:, y) 没有给我我需要的结果!

知道如何实现这一目标吗?

【问题讨论】:

    标签: matrix vector indexing octave


    【解决方案1】:

    您需要将这些列索引转换为线性索引。你这样做:

    octave:1> A = zeros (4, 3);
    octave:2> c_sub = [1, 1, 2, 3];
    octave:3> ind = sub2ind (size (A), 1:rows(A), c_sub)
    ind =
    
        1    2    7   12
    octave:4> A(ind) = 1
    A =
    
       1   0   0
       1   0   0
       0   1   0
       0   0   1
    

    但是,如果您的矩阵如此稀疏,请务必创建一个适当的稀疏矩阵:

    octave:4> sparse (1:4, c_sub, 1, 4, 3)
    ans =
    
    Compressed Column Sparse (rows = 4, cols = 3, nnz = 4 [33%])
    
      (1, 1) ->  1
      (2, 1) ->  1
      (3, 2) ->  1
      (4, 3) ->  1
    

    也许考虑使用逻辑矩阵(使用false 代替zerostrue 代替1

    【讨论】:

    • c_sub 来自哪里?我有error: 'c_sub' undefined near line 1 column 37
    • @bachr c_sub 是您的问题中的y.',carandraugs 中的A 是您的Y
    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 2022-11-02
    • 2020-07-08
    • 2016-06-22
    • 2015-03-25
    • 1970-01-01
    • 2020-03-02
    相关资源
    最近更新 更多