MATLAB 2D-индексирование извлекает прямоугольную подматрицу, в которой ее строки и столбцы переупорядочиваются на основе предоставленных векторов индекса.Но если у вас есть список строк и столбцов и вы хотите извлечь соответствующие элементы, вы должны преобразовать 2D-индекс в линейный индекс, и для него вы можете использовать sub2ind :
M = zeros(5);
indices = 1:5;
idx = sub2ind([5,5],indices(1:end-1), indices(1:end-1)+1);
M(idx) = 1
В качестве альтернативы выможно напрямую использовать линейное индексирование:
M = zeros(5);
M(5+1:5+1:end) = 1
Как работает линейное индексирование?В MATLAB данные хранятся в главном формате столбца:
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
Когда вы используете диапазон 6:6:end
, это означает, что вы хотите запустить элемент формы 6 с размером шага 6, чтобы извлечь элементы, поэтому вам нужны элементы [6 12 18 24]
.Эту схему индексации можно распространить на массивы ND и неквадратные матрицы.