Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Listen und NumPy-Arrays | Effiziente Nutzung von Datenstrukturen
Optimierungstechniken in Python
course content

Kursinhalt

Optimierungstechniken in Python

Optimierungstechniken in Python

1. Verstehen und Messen der Leistung
2. Effiziente Nutzung von Datenstrukturen
3. Leistungssteigerung mit Integrierten Werkzeugen

book
Listen und NumPy-Arrays

Die Wahl der richtigen Datenstruktur kann sowohl die Geschwindigkeit als auch die Speichernutzung erheblich beeinflussen. Lassen Sie uns zunächst Listen erkunden und sie mit NumPy-Arrays vergleichen, um zu verstehen, wann und wie diese Datenstrukturen effektiv eingesetzt werden können.

Liste

Eine list ist einer der am häufigsten verwendeten Datentypen. Sie fungiert als dynamisches Array, was bedeutet, dass ihre Größe bei Bedarf wachsen oder schrumpfen kann. Listen sind vielseitig und bieten effizienten Zugriff und Modifikation an beliebigen Indizes. Allerdings können Operationen wie das Einfügen oder Entfernen von Elementen und das Suchen nach einem Element (Überprüfung der Mitgliedschaft) bei großen Listen langsam werden. Die Ausnahme ist das Einfügen oder Entfernen am Ende der Liste, das unabhängig von der Größe der Liste effizient bleibt.

Es wäre eine gute Wahl, Listen in den folgenden Szenarien zu verwenden:

  • Sie benötigen geordnete Daten;
  • Sie greifen häufig auf Elemente zu oder ändern sie über den Index;
  • Sie müssen verschiedene Datentypen speichern (z. B. Ganzzahlen, Zeichenfolgen oder benutzerdefinierte Objekte);
  • Sie benötigen keine schnelle Mitgliedschaftsprüfung oder schnelles Einfügen oder Entfernen aus der Mitte der Liste.
123456789101112131415
my_list = [10, 20, 30] # Access an element by index print(my_list[1]) # Modify an element at a specific index my_list[1] = 50 print(my_list) # Insert an element at the end of the list my_list.append(40) print(my_list) # Remove an element from the end of the list my_list.pop() print(my_list)
copy

NumPy Array

Während Listen vielseitig sind, sind sie nicht die effizienteste Wahl für groß angelegte numerische Operationen. Hier kommen NumPy-Arrays ins Spiel.

NumPy-Arrays sind in C implementiert, was sie für numerische Operationen viel schneller macht als Listen. Ein entscheidender Faktor ist die Vektorisierung, die es ermöglicht, Operationen auf ganzen Arrays gleichzeitig durchzuführen, ohne dass explizite Schleifen erforderlich sind. Dies führt zu erheblichen Leistungssteigerungen, insbesondere bei großen Datensätzen.

Schauen wir uns ein Beispiel an, bei dem jedes Element in einer Liste (unter Verwendung einer for-Schleife innerhalb einer List Comprehension) und einem NumPy-Array (unter Verwendung der Vektorisierung) quadriert wird:

1234567891011121314151617181920
import numpy as np import os os.system('wget https://content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator my_list = list(range(1, 100001)) arr = np.array(my_list) @timeit_decorator(number=100) def square_list(numbers_list): return [x ** 2 for x in numbers_list] @timeit_decorator(number=100) def square_array(numbers_array): return numbers_array ** 2 sqaures_list = square_list(my_list) squares_array = square_array(arr) if np.array_equal(squares_array, sqaures_list): print('The array is equal to the list')
copy

Wie Sie sehen können, ist der Leistungsvorteil von NumPy-Arrays ziemlich offensichtlich.

Beim Umgang mit numerischen Daten bieten NumPy-Arrays einen Speicher-Vorteil gegenüber Listen. Sie speichern tatsächliche Daten in zusammenhängenden Speicherblöcken, was sie effizienter macht, insbesondere für große Datensätze. Da sie homogen (gleicher Datentyp) sind, vermeiden NumPy-Arrays den Overhead von Objektverweisen.

Im Gegensatz dazu sind Listen heterogen und speichern Verweise auf Objekte in zusammenhängendem Speicher, wobei die tatsächlichen Objekte anderswo gespeichert werden. Diese Flexibilität führt zu zusätzlichem Speicher-Overhead beim Arbeiten mit numerischen Daten.

Zusammenfassend vergleicht die folgende Tabelle Listen mit NumPy-Arrays:

1. Sie entwickeln ein Programm zur Verwaltung einer Sammlung von Sensor-Objekten (benutzerdefinierte Klasse), die jeweils einen timestamp (String) und eine reading (Float) enthalten. Der Datensatz wird im Laufe der Zeit wachsen, und häufige Aktualisierungen einzelner Sensorwerte sind erforderlich. Welche Datenstruktur wäre die beste Wahl?

2. Sie arbeiten mit einem großen numerischen Datensatz für ein Machine-Learning-Projekt. Welche Datenstruktur würde die effizienteste Leistung für diese Aufgabe bieten?

3. Sie analysieren Börsendaten, die aus numerischen Werten (Preisen) über die Zeit bestehen. Sie müssen schnelle Berechnungen durchführen, wie zum Beispiel den Durchschnittspreis finden und mathematische Transformationen auf die Daten anwenden. Welche Datenstruktur würden Sie wählen?

Sie entwickeln ein Programm zur Verwaltung einer Sammlung von `Sensor`-Objekten (benutzerdefinierte Klasse), die jeweils einen `timestamp` (String) und eine `reading` (Float) enthalten. Der Datensatz wird im Laufe der Zeit wachsen, und häufige Aktualisierungen einzelner Sensorwerte sind erforderlich. Welche Datenstruktur wäre die beste Wahl?

Sie entwickeln ein Programm zur Verwaltung einer Sammlung von Sensor-Objekten (benutzerdefinierte Klasse), die jeweils einen timestamp (String) und eine reading (Float) enthalten. Der Datensatz wird im Laufe der Zeit wachsen, und häufige Aktualisierungen einzelner Sensorwerte sind erforderlich. Welche Datenstruktur wäre die beste Wahl?

Wählen Sie die richtige Antwort aus

Sie arbeiten mit einem großen numerischen Datensatz für ein Machine-Learning-Projekt. Welche Datenstruktur würde die effizienteste Leistung für diese Aufgabe bieten?

Sie arbeiten mit einem großen numerischen Datensatz für ein Machine-Learning-Projekt. Welche Datenstruktur würde die effizienteste Leistung für diese Aufgabe bieten?

Wählen Sie die richtige Antwort aus

Sie analysieren Börsendaten, die aus numerischen Werten (Preisen) über die Zeit bestehen. Sie müssen schnelle Berechnungen durchführen, wie zum Beispiel den Durchschnittspreis finden und mathematische Transformationen auf die Daten anwenden. Welche Datenstruktur würden Sie wählen?

Sie analysieren Börsendaten, die aus numerischen Werten (Preisen) über die Zeit bestehen. Sie müssen schnelle Berechnungen durchführen, wie zum Beispiel den Durchschnittspreis finden und mathematische Transformationen auf die Daten anwenden. Welche Datenstruktur würden Sie wählen?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 1
We're sorry to hear that something went wrong. What happened?
some-alt