0
votes

Comment effectuer la multiplication de la matrice de permutation dans Python?

Les matrices de permutation A et B sont carrées et ne contient qu'un seul 1 dans chaque rangée. Toutes les rangées sont uniques. J'ai ajouté ma première tentative comme une réponse. J'espère que quelqu'un a une solution plus rapide.

def permmult(a, b):
    """Multiply two permutation matrices.

     a,b: lists of positive integers and zero."""
    c = []
    for row in a:
        c.append(b[-row])
    return c


2 commentaires

Combien de temps pensez-vous que cela puisse être fait?


Pouvez-vous fournir un exemple d'entrée et de sortie. Votre relevé initial que A et B sont la matrice de permutation (contenant uniquement les 1s et 0) est contredit par votre commentaire sur la variable A, B dans le code. Le code assume deux listes (non des matrices) à moins que vous n'utilisez NUMPY et oublié de nous dire. De plus, si A et B ne contenaient que 1 et 0s, le C résultant serait une combinaison de 1er et dernier élément de b.


3 Réponses :


0
votes

Le meilleur que j'ai réalisé jusqu'à présent ... xxx


0 commentaires

1
votes

Ceci est plus court sinon plus rapide: xxx


1 commentaires

Un peu plus vite.



1
votes

Les matrices de permutation sont un beau concept mathématique, mais ils ne sont pas comment vous aborderiez des éléments de réorganisation dans un vecteur de manière programmatique (à moins que vous n'essayez de faire quelque chose de spécial avec NUMPY).

Création d'une matrice de permutation (P) d'un Vector (k) d'index de réorganisation peut être fait comme ceci: p> xxx pré>

sortie: p> xxx pré>

appliquer cette matrice de permutation à un autre vecteur (c'est-à-dire multiplier) des canettes comme ceci: p> xxx pré>

sortie: p> xxx pré>

mais, en code, quoi serait beaucoup plus efficace qu'une matrice de permutation serait d'utiliser l'index d'origine Vecteur K: P>

V = "ABCDE"
print([V[i] for i in K])
['A', 'D', 'B', 'E', 'C']


0 commentaires