Я обычно использую ГЛАЗ для этого:
A = magic(4)
A(logical(eye(size(A)))) = 99
A =
99 2 3 13
5 99 10 8
9 7 99 12
4 14 15 99
В качестве альтернативы, вы можете просто создать список линейных индексов, поскольку от одного диагонального элемента к следующему требуется nRows+1
шагов:
[nRows,nCols] = size(A);
A(1:(nRows+1):nRows*nCols) = 101
A =
101 2 3 13
5 101 10 8
9 7 101 12
4 14 15 101
Если вы хотите получить доступ только к подмножеству диагональных элементов, вам нужно создать список диагональных индексов:
subsetIdx = [1 3];
diagonalIdx = (subsetIdx-1) * (nRows + 1) + 1;
A(diagonalIdx) = 203
A =
203 2 3 13
5 101 10 8
9 7 203 12
4 14 15 101
Кроме того, вы можете создать массив логических индексов, используя diag
(работает только для квадратных массивов)
diagonalIdx = false(nRows,1);
diagonalIdx(subsetIdx) = true;
A(diag(diagonalIdx)) = -1
A =
-1 2 3 13
5 101 10 8
9 7 -1 12
4 14 15 101