Матричный индекс чередования - PullRequest
1 голос
/ 06 марта 2019

Я знаком с матричным индексированием в Matlab, но этот определенный синтаксис немного сбивает меня с толку.Например, a = [1 2 3 4 5 6 7 8 9 10] и b = [2 4 6 8 10 1 3 5 7 9].Я понимаю, что a(b) будет просто равна матрице b, но проблема возникает, когда я делаю a(b) = a.Этот синтаксис производит матрицу [6 1 7 2 8 3 9 4 10 5].Я уверен, что там есть шаблон, который мне не хватает, но я потратил слишком много времени на то, чтобы это заметить.Что именно здесь происходит и чего мне не хватает?

1 Ответ

1 голос
/ 06 марта 2019

Строка 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 в нечетные позиции индекса.

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