在 Python 中计算两个列表的点积
-
在 Python 中使用
sum()
和zip()
函数计算点积 -
在 Python 中使用
map()
和mul()
函数计算点积 -
在 Python 中使用
more_itertools.dotproduct
计算点积 - 在 Python 中使用 NumPy 计算点积
点积是一种数学运算,也称为标量积。点积是一个代数表达式,它接受两个相等长度的序列并返回一个数字作为结果。
在 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 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