在 Python 中计算两个列表的点积

Isaac Tony 2023年1月30日 2022年5月17日
  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
Author: 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