计算点积的 Pythonic 方法是什么?

40 投票
12 回答
148358 浏览
提问于 2025-04-16 17:10

我有两个列表,一个叫做A,另一个叫做B。A里的每个元素都是三个数字组成的三元组,而B里的每个元素只是一个数字。我想计算一个结果,定义如下:

result = A[0][0] * B[0] + A[1][0] * B[1] + ... + A[n-1][0] * B[n-1]

我知道这个逻辑很简单,但怎么用Python的方式来写呢?

谢谢!

12 个回答

32

我最喜欢的Python风格的点积计算方法是:

sum([i*j for (i, j) in zip(list1, list2)])


所以对于你的情况,我们可以这样做:

sum([i*j for (i, j) in zip([K[0] for K in A], B)])
80

Python 3.5 引入了一个专门的符号 @ 来表示点积运算,

a = A @ B

这样你就可以用这个符号来写点积,而不需要用其他复杂的方式。

a = numpy.dot(A,B)
44
import numpy
result = numpy.dot( numpy.array(A)[:,0], B)

http://docs.scipy.org/doc/numpy/reference/

如果你想不使用numpy来实现这个功能,可以试试下面的方法:

sum( [a[i][0]*b[i] for i in range(len(b))] )

撰写回答