八度使用向量作为矩阵的列索引

时间:2018-08-31 15:31:57

标签: matrix vector indexing octave

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

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

Y(y)或Y(:, y)不能给我我需要的结果!

有什么想法我可以实现吗?

1 个答案:

答案 0 :(得分:2)

您需要将这些列索引转换为线性索引。您可以这样操作:

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代替zeros,而使用true代替1