Вам необходимо преобразовать индексы этих столбцов в линейные индексы. Вы делаете это так:
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
.