октава использовать вектор как индекс столбцов для матрицы - PullRequest
0 голосов
/ 31 августа 2018

У меня есть вектор 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 голосов
/ 31 августа 2018

Вам необходимо преобразовать индексы этих столбцов в линейные индексы. Вы делаете это так:

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.

...