Quiero modificar una matriz de transición cuadrada densa en el lugar cambiando el orden de varias de sus filas y columnas, usando la biblioteca numpy de python. Matemáticamente, esto corresponde a la multiplicación previa de la matriz por la matriz de permutación P y la multiplicación posterior por P ^ -1 = P ^ T, pero esta no es una solución computacionalmente razonable.
En este momento estoy intercambiando manualmente filas y columnas, pero hubiera esperado que numpy tuviera una buena función f (M, v) donde M tiene n filas y columnas, y v tiene n entradas, de modo que f (M, v) se actualiza M de acuerdo con el índice de permutación v. Tal vez simplemente no estoy buscando en Internet.
Algo así podría ser posible con la "indexación avanzada" de numpy, pero entiendo que tal solución no estaría en su lugar. También para algunas situaciones simples puede ser suficiente rastrear por separado una permutación de índice, pero esto no es conveniente en mi caso.
Agregado: a
veces, cuando las personas hablan de permutaciones, solo se refieren al muestreo de permutaciones aleatorias, por ejemplo, como parte de un procedimiento para obtener valores p en las estadísticas. O significan contar o enumerar todas las permutaciones posibles. No estoy hablando de estas cosas.
Agregado:
la matriz es lo suficientemente pequeña como para caber en la RAM del escritorio, pero lo suficientemente grande como para que no quiera copiarla sin pensar. En realidad, me gustaría usar matrices lo más grandes posible, pero no quiero lidiar con el inconveniente de no poder mantenerlas en la RAM, y hago operaciones de O (N ^ 3) LAPACK en la matriz que también limitar el tamaño práctico de la matriz. Actualmente copio matrices tan grandes innecesariamente, pero espero que esto pueda evitarse fácilmente para la permutación.
M[v]
para permutar las filas.