Я хочу змінити щільну квадратну матрицю переходу на місці, змінивши порядок кількох її рядків і стовпців, використовуючи бібліотеку numpy python. Математично це відповідає попередньому множенню матриці на перестановкову матрицю P і післяпомноження на P ^ -1 = P ^ T, але це не є обчислювально обґрунтованим рішенням.
Зараз я обмінюю рядки та стовпці вручну, але я б очікував, що numpy матиме гарну функцію f (M, v), де M має n рядків та стовпців, а v має n записів, так що f (M, v) оновлення М відповідно до індексу перестановки проти. Можливо, мені просто не вдається шукати Інтернет.
Щось подібне може бути можливим при "розширеному індексуванні" numpy, але я розумію, що таке рішення не було б на місці. Також для деяких простих ситуацій може бути достатньо окремо відстежити перестановку індексу, але це не зручно в моєму випадку.
Додано:
Іноді, коли люди говорять про перестановки, вони мають на увазі лише вибірку випадкових перестановок, наприклад, як частину процедури отримання р-значень у статистиці. Або вони означають підрахунок або перерахування всіх можливих перестановок. Я не кажу про ці речі.
Додано:
Матриця є досить маленькою, щоб вміститися в робочу пам’ять, але досить велика, що я не хочу копіювати її бездумно. Насправді я хотів би використовувати матриці якомога більші, але я не хочу мати справу з незручністю неможливості їх утримувати в оперативній пам'яті, і я виконую операції O (N ^ 3) LAPACK на матриці, яка також обмежте практичний розмір матриці. Наразі я копіюю матриці цієї великої кількості без потреби, але сподіваюся, що цього можна легко уникнути для перестановки.
M[v]
перестановка рядків.