Chcę zmodyfikować gęstą kwadratową macierz przejścia w miejscu, zmieniając kolejność kilku jej wierszy i kolumn, używając biblioteki numpy Pythona. Matematycznie odpowiada to pomnożeniu macierzy przez macierz permutacji P i pomnożeniu jej przez P ^ -1 = P ^ T, ale nie jest to uzasadnione obliczeniowo rozwiązanie.
W tej chwili ręcznie zmieniam wiersze i kolumny, ale oczekiwałbym, że numpy będzie mieć fajną funkcję f (M, v), gdzie M ma n wierszy i kolumn, a v ma n wpisów, więc f (M, v) aktualizuje M zgodnie z permutacją indeksu v. Może po prostu nie udaje mi się przeszukać Internetu.
Coś takiego może być możliwe przy „zaawansowanym indeksowaniu” Numpy, ale rozumiem, że takie rozwiązanie nie byłoby na miejscu. Również w niektórych prostych sytuacjach może być wystarczające oddzielne śledzenie permutacji indeksu, ale w moim przypadku nie jest to wygodne.
Dodano:
Czasami, gdy ludzie mówią o permutacjach, mają na myśli jedynie próbkowanie permutacji losowych, na przykład jako część procedury uzyskiwania wartości pw statystyce. Lub oznaczają zliczanie lub wyliczanie wszystkich możliwych permutacji. Nie mówię o tych rzeczach.
Dodano:
Matryca jest wystarczająco mała, aby zmieściła się w RAM-ie pulpitu, ale wystarczająco duża, że nie chcę jej bezmyślnie kopiować. Właściwie chciałbym używać macierzy tak dużych, jak to możliwe, ale nie chcę uporać się z niedogodnościami związanymi z niemożnością trzymania ich w pamięci RAM i wykonuję operacje O (N ^ 3) LAPACK na macierzy, które również ograniczyć praktyczny rozmiar matrycy. Obecnie niepotrzebnie kopiuję macierze tak duże, ale mam nadzieję, że można tego łatwo uniknąć w przypadku permutacji.
M[v]
permutować wiersze.