Je veux modifier une matrice de transition carrée dense en place en changeant l'ordre de plusieurs de ses lignes et colonnes, en utilisant la bibliothèque numpy de python. Mathématiquement, cela correspond à la pré-multiplication de la matrice par la matrice de permutation P et à la post-multiplication par P ^ -1 = P ^ T, mais ce n'est pas une solution calculable.
En ce moment, j'échange manuellement des lignes et des colonnes, mais je m'attendais à ce que numpy ait une belle fonction f (M, v) où M a n lignes et colonnes, et v a n entrées, de sorte que f (M, v) se mette à jour M selon la permutation d'index v. Peut-être que je ne réussis pas à chercher sur Internet.
Quelque chose comme cela pourrait être possible avec "l'indexation avancée" de numpy mais je crois comprendre qu'une telle solution ne serait pas en place. De plus, pour certaines situations simples, il peut être suffisant de suivre séparément une permutation d'index, mais ce n'est pas pratique dans mon cas.
Ajouté:
Parfois, lorsque les gens parlent de permutations, ils ne signifient que l'échantillonnage de permutations aléatoires, par exemple dans le cadre d'une procédure pour obtenir des valeurs de p dans les statistiques. Ou ils signifient compter ou énumérer toutes les permutations possibles. Je ne parle pas de ces choses.
Ajouté:
La matrice est assez petite pour tenir dans la RAM du bureau mais assez grande pour que je ne veuille pas la copier sans réfléchir. En fait, je voudrais utiliser des matrices aussi grandes que possible, mais je ne veux pas gérer l'inconvénient de ne pas pouvoir les conserver dans la RAM, et je fais des opérations O (N ^ 3) LAPACK sur la matrice qui serait également limiter la taille de la matrice pratique. Je copie actuellement des matrices de cette taille inutilement, mais j'espère que cela pourrait être facilement évité pour la permutation.
M[v]
à permuter les lignes.