Wie kann ich diesen zweizeiligen Code beschleunigen?

8

Ich muss den folgenden Code beschleunigen:

%Vor%

N ist um 30 , also ist der Code sehr langsam (es dauert ungefähr 33 Stunden auf meinem Laptop). Das Argument der Funktion f() ist die binäre Repräsentation des Index i und f() kann eine beliebige vektorisierbare Funktion sein. Ich bin kein Experte, aber um den Code zu beschleunigen, dachte ich daran, die for -Schleife loszuwerden, was bedeutet, dass ich das Argument von f() vektorisieren muss. Mit anderen Worten, ich muss eine Matrix mit den binären Darstellungen der Zahlen von 0 bis 2**N erstellen. Dies kann durch den folgenden Code erreicht werden:

%Vor%

das habe ich bei diesen Link gefunden . Es scheint mir jedoch, dass itertools sehr langsam ist und eindeutig viel Speicher braucht, da 2**30 ungefähr eine Milliarde beträgt.

Haben Sie Vorschläge, diesen Code schneller zu machen? Vielen Dank im Voraus.

    
user2983638 31.10.2016, 17:30
quelle

1 Antwort

6

Immer Profil:

%Vor%

Sie können sehen, dass die Methode itertools.product wesentlich schneller ist, da sie nicht mit Strings herumspielen muss.

Das Problem könnte sein, dass die meiste Zeit in der Funktion f verbracht wird.

Eine andere Lösung könnte darin bestehen, dass f eine Ganzzahl akzeptiert und sie als Binärfeld verwendet.

    
Francisco Couzo 31.10.2016, 18:03
quelle

Tags und Links