Я хочу изменить плотную квадратную матрицу перехода на месте, изменив порядок нескольких ее строк и столбцов, используя библиотеку NumPy Python. Математически это соответствует предварительному умножению матрицы на матрицу перестановок P и последующему умножению ее на P ^ -1 = P ^ T, но это не является разумным в вычислительном отношении решением.
Прямо сейчас я меняю строки и столбцы вручную, но я ожидал, что у numpy будет хорошая функция f (M, v), где M имеет n строк и столбцов, а v имеет n записей, так что f (M, v) обновляет M в соответствии с перестановкой индекса v. Может быть, я просто не могу найти в Интернете.
Нечто подобное может быть возможно с «продвинутой индексацией» numpy, но, насколько я понимаю, такого решения не будет. Также для некоторых простых ситуаций может быть достаточно просто отдельно отслеживать перестановку индекса, но это не удобно в моем случае.
Добавлено:
Иногда, когда люди говорят о перестановках, они имеют в виду только выборку случайных перестановок, например, как часть процедуры для получения p-значений в статистике. Или они означают подсчет или перечисление всех возможных перестановок. Я не говорю об этих вещах.
Добавлено:
Матрица достаточно мала, чтобы поместиться в оперативной памяти, но достаточно большой, чтобы я не хотел копировать ее бездумно. На самом деле я хотел бы использовать матрицы как можно большего размера, но я не хочу иметь дело с неудобством невозможности удерживать их в ОЗУ, и я выполняю O (N ^ 3) операций LAPACK над матрицей, что также ограничить практический размер матрицы. В настоящее время я копирую такие большие матрицы без необходимости, но я надеюсь, что этого легко избежать при перестановке.
M[v]
переставляет строки.