Строка a(b) = a
выполняет операцию векторизованной индексации для элементов b
и a
(требуя, чтобы у них было такое же количество элементов, как и у них).Для лучшего понимания того, что он делает, вот эквивалентная не векторизованная операция, выполненная с циклом for:
c = a; % Store original to work from
for index = 1:numel(b)
a(b(index)) = c(index);
end
Итак, элементу a(b(1))
(или a(2)
, второй элемент) присваиваетсязначение из a(1)
, элементу a(b(2))
(или a(4)
, четвертый элемент) присваивается значение из a(2)
и т. д. Это эквивалентно сортировке элементов вектора индекса b
с последующим применением того же самогосортировка перестановок до a
.Для данного вектора b
это помещает элементы из первой половины a
в четные позиции индекса и элементы из последней половины a
в нечетные позиции индекса.