在 Python 中計算兩個列表的點積

Isaac Tony 2023年1月30日
  1. 在 Python 中使用 sum()zip() 函式計算點積
  2. 在 Python 中使用 map()mul() 函式計算點積
  3. 在 Python 中使用 more_itertools.dotproduct 計算點積
  4. 在 Python 中使用 NumPy 計算點積
在 Python 中計算兩個列表的點積

點積是一種數學運算,也稱為標量積。點積是一個代數表示式,它接受兩個相等長度的序列並返回一個數字作為結果。

在 Python 中使用 sum()zip() 函式計算點積

我們可以使用 zip() 函式和 sum() 函式計算等長列表的點積。

zip 函式通過組合來自兩個可迭代物件的元組序列中的元素來返回一個 zip 物件。另一方面,sum 函式返回可迭代物件(例如列表)中專案的總和。

由於點積在數學上涉及數字序列中元素的一系列總和和乘積,我們可以使用這兩者的組合來計算兩個列表的點積。

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

print(sum([i * j for (i, j) in zip(num1, num2)]))

輸出:

1100

在 Python 中使用 map()mul() 函式計算點積

Python 中的 operator 模組提供了一組函式來匯入和使用 Python 中的內部運算子來執行各種操作。

這些運算包括邏輯運算、序列運算、數學運算和物件比較。mul() 函式執行物件與一系列數字(例如 DataFrame)的逐元素乘法。

另一方面,map() 函式是一個內建函式,它允許我們將某個函式應用於可迭代物件的所有元素。最後,我們還將使用 sum() 函式計算兩個數值列表的乘積之和,如下面的程式碼所示。

from operator import mul

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

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

輸出:

1100

在 Python 中使用 more_itertools.dotproduct 計算點積

Python more_itertools 是一個 Python 庫,它提供了優雅的函式來處理 Python 中的可迭代物件。more_itertools 庫提供的函式允許我們在視窗、組合和包裝等其他操作中對可迭代物件進行分組和選擇。

more_itertools 庫不僅為複雜的迭代提供解決方案;它也更優雅和記憶體效率更高。使用 more_itertools.product() 函式,我們可以計算列表中數字序列的點積,如下所示。

import more_itertools as mit

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]
print(mit.dotproduct(num1, num2))

輸出:

1100

在 Python 中使用 NumPy 計算點積

NumPy 是一個科學的 Python 包,它允許我們處理多維物件,例如陣列和矩陣。

NumPy 速度快但效率更高,因為我們可以使用很少的程式碼實現很多目標。我們可以無縫地使用陣列,而無需顯式索引和迴圈遍歷其向量化程式碼。

下面是一個解決方案,它使用 for 迴圈以及乘積和加法運算子的組合來計算兩個列表的點積。

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

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

輸出:

The dot product of the two lists is:  1100

儘管此解決方案計算點積,但 NumPy 提供了一種更優雅的替代方案,無需編寫任何迴圈。

使用 numpy.dot() 方法,我們可以輕鬆計算兩個列表中數字序列的點積。這個解決方案是精確的,因此不容易出錯,可以在下面的程式碼中實現。

import numpy as np

num1 = [2, 4, 6, 8, 10]
num2 = [10, 20, 30, 40, 50]
dot_product = np.dot(num1, num2)
print("The dot product of the two lists is: ", dot_product)

輸出:

The dot product of the two lists is:  1100
作者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

相關文章 - Python List