Eu quero modificar uma matriz de transição quadrada densa no local, alterando a ordem de várias de suas linhas e colunas, usando a biblioteca numpy do python. Matematicamente, isso corresponde à pré-multiplicação da matriz pela matriz de permutação P e à pós-multiplicação por P ^ -1 = P ^ T, mas essa não é uma solução computacionalmente razoável.
No momento, estou trocando manualmente linhas e colunas, mas eu esperava que o numpy tivesse uma boa função f (M, v), onde M tem n linhas e colunas ev tem n entradas, para que f (M, v) seja atualizado M de acordo com a permutação de índice v. Talvez eu esteja apenas falhando ao pesquisar na internet.
Algo assim pode ser possível com a "indexação avançada" da numpy, mas meu entendimento é que essa solução não estaria em vigor. Também para algumas situações simples, pode ser suficiente rastrear apenas uma permutação de índice separadamente, mas isso não é conveniente no meu caso.
Adicionado:
Às vezes, quando as pessoas falam sobre permutações, elas significam apenas a amostragem de permutações aleatórias, por exemplo, como parte de um procedimento para obter valores de p em estatística. Ou eles significam contar ou enumerar todas as permutações possíveis. Eu não estou falando sobre essas coisas.
Adicionado:
a matriz é pequena o suficiente para caber na RAM da área de trabalho, mas grande o suficiente para que eu não queira copiá-la sem pensar. Na verdade, eu gostaria de usar matrizes tão grandes quanto possível, mas não quero lidar com o inconveniente de não poder mantê-las na RAM e faço O (N ^ 3) operações LAPACK na matriz, o que também limitar o tamanho da matriz prática. Atualmente, copio matrizes desse tamanho desnecessariamente, mas espero que isso possa ser facilmente evitado por permutação.
M[v]
para permutar as linhas.