2016-10-12 1 views
0

Wie kann ich diesen Code in Python beschleunigen?Beschleunigen verschachtelte Schleifen in Python

Hier ist TT eine feste 6x6-Matrix, p ist eine feste 1x6-Matrix, und F ist eine feste 1x6-Matrix. T_n ist die n-te Potenz von TT.

Diese while-Schleife könnte für 10^4 mal wiederholt werden.

+1

Gibt es einen Grund, warum Sie wollen, dass 'T_n' eine Liste von Listen statt einer numpigen Matrix ist? – SethMMorton

+0

Können Sie bitte einige Beispieldaten für TT, p, F und T_n angeben. Dann wäre dies ein funktionierendes Beispiel, das einfach getestet werden kann (natürlich können wir eigene Zufallsmatrizen erstellen, aber andersherum wäre Ihr Code ein ausführbares Programm zum Kopieren und Einfügen (wenn Sie auch Importe mit einschließen ...) – MichaelA

+0

Sie können Fragen Sie auch nach [Code Review] (http://codereview.stackexchange.com/) – Wondercricket

Antwort

0

Der Weg, diese Dinge schnell zu tun, ist die Verwendung der integrierten Funktionen und Operatoren von Numpy, um die Operationen auszuführen. Numpy wird intern mit optimiertem C-Code implementiert und wenn Sie Ihre Berechnung richtig einrichten, wird es viel schneller laufen.

Effektive Nutzung von Numpy kann jedoch manchmal schwierig sein. Es wird "Vektorisieren" Ihres Codes genannt - Sie müssen herausfinden, wie Sie es auf eine Weise ausdrücken können, die auf ganze Arrays und nicht auf explizite Schleifen wirkt.

Zum Beispiel in der Schleife Sie p[i] * T_n[j][i] haben, die meine Meinung nach kann mit einer Vektor-by-Matrix-Multiplikation durchgeführt werden: wenn v 6x6 1x6 und m ist dann v.dot(m) 1x6, die Skalarprodukte v mit den Spalten von m berechnet . Sie können Transpositionen und Umformungen verwenden, um bei Bedarf in verschiedenen Dimensionen zu arbeiten.

+0

Vielen Dank für Ihre Vorschläge Ich habe zwei verschiedene Methoden ausprobiert um die verschachtelte Schleife durch eine einzige zu ersetzen Codezeile: list comprehensions und numpy.einsum, verschachtelte Schleifen waren jedoch schneller mit beiden Alternativen zu vergleichen. – Ali

Verwandte Themen