HOWTO · Python

So berechnen Sie das Punktprodukt zweier Listen in Python

Erfahren Sie, wie Sie das Punktprodukt zweier gleich langer numerischer Listen in Python mit integrierten Ansätzen, Standardbibliothek, Drittanbieterpaketen und NumPy berechnen.

Auf dieser Seite

Das Punktprodukt (auch Skalarprodukt genannt) multipliziert die entsprechenden Werte in zwei gleich langen numerischen Folgen und addiert dann diese Produkte. Beispielsweise haben [2, 4, 6, 8, 10] und [10, 20, 30, 40, 50] ein Punktprodukt von 1100. Die folgenden Beispiele zeigen vier Wege, es in Python zu berechnen; die gemeinsamen Eingaben machen die Ansätze leicht vergleichbar, sie sind kein Geschwindigkeitstest.

Für die Listen a und b lautet die Berechnung a[0] * b[0] + a[1] * b[1] + .... Jede Position in einer Liste wird mit dem Wert an derselben Position in der anderen Liste gepaart. Die Beispiele verwenden Ganzzahlen, aber dieselben Muster funktionieren auch mit anderen numerischen Werten, einschließlich Gleitkommazahlen. Das Ergebnis ist ein einzelner Skalarwert und keine Liste paarweiser Produkte.

Mit den Funktionen sum() und zip() das Punktprodukt in Python berechnen

zip() paart die entsprechenden Elemente aus den beiden Listen, und sum() addiert die Produkte. Dieser integrierte Ansatz ist eine prägnante Wahl, wenn die Listen gleich lang sind:

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]

result = sum(x * y for x, y in zip(num1, num2))
print(result)
1100

zip() stoppt, wenn das kürzere Iterable endet. Unterscheiden sich die Längen, lässt dieser Ausdruck nicht übereinstimmende Werte stillschweigend aus der Berechnung heraus. Prüfen Sie zuerst, ob die Längen übereinstimmen, oder wählen und dokumentieren Sie eine andere Regel für nicht übereinstimmende Werte.

Das Punktprodukt mit den Funktionen map() und mul() in Python berechnen

Das Modul operator der Standardbibliothek bietet mul(), eine Funktion, die zwei Werte multipliziert. Die integrierte Funktion map() wendet sie auf die entsprechenden Werte aus beiden Listen an, und sum() addiert die Produkte:

from operator import mul

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]

result = sum(map(mul, num1, num2))
print(result)

Wie das erste Beispiel stoppt auch map(), wenn sein kürzestes Eingabe-Iterable endet. Prüfen Sie zuerst die Listenlängen, wenn das Weglassen nicht übereinstimmender Werte nicht das beabsichtigte Verhalten ist.

Das Punktprodukt mit more_itertools.dotproduct in Python berechnen

more_itertools ist ein Drittanbieterpaket; installieren Sie es in Ihrer Umgebung, bevor Sie es importieren. Seine Funktion dotproduct berechnet direkt die Summe der paarweisen Produkte:

try:
    import more_itertools as mit
except ImportError:
    class _Fallback:
        @staticmethod
        def dotproduct(left, right):
            return sum(x * y for x, y in zip(left, right))

    mit = _Fallback()

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]

result = mit.dotproduct(num1, num2)
print(result)

Wenn more_itertools installiert ist, ruft dies seine Funktion dotproduct auf. Der lokale Fallback hält das Beispiel in Umgebungen ohne das optionale Paket lauffähig und berechnet dieselbe Summe gepaarter Produkte.

1100

Verwenden Sie für diese Operation den Funktionsnamen more_itertools.dotproduct. Geben Sie wie bei den anderen Beispielen Listen mit übereinstimmenden Längen an, damit jeder Wert ein entsprechendes Paar hat.

Das Punktprodukt mit NumPy in Python berechnen

Eine manuelle Python-Schleife ist ein weiterer Weg, die Produkte ein Paar nach dem anderen zu akkumulieren:

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]

dot_product = 0
for x, y in zip(num1, num2):
    dot_product += x * y
print("The dot product of the two lists is:", dot_product)

Diese Schleife verwendet zip() und stoppt daher ebenfalls bei der kürzeren Liste. Für eine arraybasierte Berechnung akzeptiert NumPy die Listen direkt. Installieren Sie NumPy in Ihrer Umgebung, bevor Sie es importieren:

import numpy as np

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]

result = np.dot(num1, num2)
print("The dot product of the two lists is:", result)

Siehe die numpy.dot()-Funktion für Details zu ihrer Array-Operation. Die manuelle Schleife und der NumPy-Aufruf sind unterschiedliche Ansätze; wählen Sie anhand des umgebenden Codes und der verfügbaren Abhängigkeiten.