Programmieren für Ingenieure
Code Optimierung
Inhaltsverzeichnis
- 1) Willkommen
- 2) Mindset
- 3) Kursübersicht
- 4) Download und Installation
- 5) Hello World
- 6) Entwicklungsumgebung
- 7) Informationen finden
- 8) Variablen
- 9) String
- 10) Integer, Float
- 11) Boolean
- 12) Abfragen
- 13) while Schleifen
- 14) for Schleifen
- 15) List
- 16) Dictionary
- 17) None
- 18) Datentypen umwandeln
- 19) Funktionen
- 20) Module
- 21) Debugging
- 22) Übungen
- 23) Übung 1: Zahlen addieren
- 24) Übung 2: Groesseren Wert finden
- 25) Übung 3: Kreis Fläche und Umfang berechnen
- 26) Entwicklungsprozess
- 27) Beispielprogramm Prozessdaten 1: kopieren
- 28) Beispielprogramm Prozessdaten 2: auswerten
- 29) Einstellungen über Settings.xml
- 30) Logging
- 31) Exceptions
- 32) Übung 4: Praxisvorbereitung
- 33) Typische Fehler
- 34) Code Optimierung
- 35) Ausführung
- 36) Ausführung 1: IDE py cmd bat
- 37) Ausführung 2: Windows exe
- 38) Ausführung 3: Aufgabenplanung
- 39) Ausführung 4: Setup Raspberry Pi
- 40) Ausführung 5: Raspberry Pi Ausführung
- 41) Danke
In dieser Lektion möchte ich dir drei Techniken zeigen, die du beachten und einfach umsetzen kannst, um die Ausführungsgeschwindigkeit deines Codes erheblich zu erhöhen.
Das wichtigste in der Praxis ist es Probleme effizient zu lösen.
Deshalb ist es oft besser eine theoretisch unschöne, aber funktionierende Lösung bereitzustellen, als ewig an perfektem Code zu arbeiten der niemals fertig wird und eingesetzt werden kann.
Für alle Perfektionisten mit Deadlines deshalb hier drei Optimierungen, die sich meiner Erfahrung nach leicht umsetzen lassen und sehr großes Verbesserungspotential haben.
Gerade zu Beginn eines Projektes führen brute force Ansätze häufig zu schnellen Lösungen, die nichtsdestotrotz um ein Vielfaches besser sind als ihre manuellen Vorgänger Prozesse.
Wenn du an einem solchen Projekt arbeitest wird es sich auf jeden Fall lohnen, wenn du dir Zeit nimmst, um zu prüfen ob du in deinem Code eventuell komplett überflüssige Operationen ausführst.
Als nächstes kannst schauen ob du unnötig geschachtelte Schleifen entdeckst, da der Zeitaufwand an diesen Stellen exponentiell ansteigt.
import time
import random# Geschachtelte Schleifen
x = 0
avgZeitI, avgZeitK, avgZeitM = 0, 0, 0
startZeitI = time.time()
for i in range(10):
time.sleep(0.001)startZeitK = time.time()
for k in range(10):
time.sleep(0.001)startZeitM = time.time()
for m in range(10):
time.sleep(0.001)avgZeitM = (k * avgZeitM + time.time() – startZeitM) / (k + 1)
avgZeitK = (i * avgZeitK + time.time() – startZeitK) / (i + 1)
avgZeitI = (x * avgZeitI + time.time() – startZeitI) / (x + 1)
x += 1print(f“m: {avgZeitM}; k: {avgZeitK}; i: {avgZeitI}“)
### ERGEBNIS / AUSGABE ###
m: 0.15620799064636232; k: 1.7183674097061157; i: 17.339600086212158
Wenn du große Listen durchsuchst, kannst du viel Zeit sparen, wenn du sie zuerst sortierst.
# Sortieren
liste = [i for i in range(5000000)]
random.shuffle(liste)for i in range(5):
startZeit = time.time()
if random.randint(0, 5000000) in liste:
print(time.time() – startZeit)liste.sort()
for i in range(5):
startZeit = time.time()
if random.randint(0, 5000000) in liste:
print(time.time() – startZeit)### ERGEBNIS / AUSGABE ###
0.12497591972351074
0.21869683265686035
0.15621304512023926
0.156174898147583
0.062522888183593750.01566290855407715
0.0
0.0468595027923584
0.029783964157104492
0.03124403953552246
Wenn genug freier Arbeitsspeicher zur Verfügung steht kannst du Laufzeiten optimieren indem du Dictionaries anstatt Listen verwendest.
Dieses Prinzip ist auch unter dem Namen Space – Time Tradeoff bekannt.
# Dictionaries
liste = [i for i in range(5000000)]
dictionary = {i: None for i in range(5000000)}for i in range(5):
x = random.randint(0, 5000000)
startZeit = time.time()
if x in liste:
print(f“List: {time.time() – startZeit}“)
startZeit = time.time()
if x in dictionary:
print(f“Dict: {time.time() – startZeit}“)### ERGEBNIS / AUSGABE ###
List: 0.015621423721313477
Dict: 0.0
List: 0.015622138977050781
Dict: 0.0
List: 0.031244277954101562
Dict: 0.0
List: 0.031279563903808594
Dict: 0.0
List: 0.06248641014099121
Dict: 0.0
Ich hoffe, dass auch dir die Beachtung dieser Techniken hilft deinen Code effizienter zu machen.
Vielen Dank fürs zuschauen bis bald =)