Индекс к линейному индексу - PullRequest
0 голосов
/ 05 мая 2019

M - матрица простых чисел от 1 до 23 (в порядке строк)

Я не понимаю, как вторая строка кода заменяет диагональные элементы M на 1. Я также запутался, потому что функция sub2ind преобразует нижний индекс строки / столбца в линейный индекс, который не имеет никакого отношения к значению записи.

M = zeros(3); M(:) = primes(23); M = M'
M(sub2ind(size(M), 1:3, 1:3)) = 1

1 Ответ

2 голосов
/ 05 мая 2019

sub2ind(size(M), 1:3, 1:3) возвращает массив [1, 5, 9] линейного индекса записей: (1,1), (2,2), (3,3). В M(sub2ind(size(M), 1:3, 1:3)) вы обращаетесь к M как к вектору, это эквивалентно записи M([1, 5, 9]), поэтому вы обращаетесь к матрице с линейным индексированием, и вы присваиваете значение 1 для этих записей: M(sub2ind(size(M), 1:3, 1:3)) = 1, чтобы изменить стоимость этих записей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...