Python中的点积

14

这段Python代码是否可以用于计算两个向量的点积?

import operator

vector1 = (2,3,5)
vector2 = (3,4,6)
dotProduct = reduce( operator.add, map( operator.mul, vector1, vector2))

似乎是这样,是的,你为什么问呢? - Noon Silk
1
这个问题最好问成“如何在(纯)Python中执行点积”,或类似的形式。 - ThorSummoner
2个回答

48

是的,它可以。这里还有另一种方法。

>>> sum(map( operator.mul, vector1, vector2))
48

还有一个方法完全不使用operator

>>> vector1 = (2,3,5)
>>> vector2 = (3,4,6)
>>> sum(p*q for p,q in zip(vector1, vector2))
48

1
不错,唯一的问题是你漏掉了列表解析中的 []。 - chuse
13
@chuse,这里没有列表推导式,而是一个生成器表达式。 - John La Rooy
4
哇,我不知道这个存在。事实上,我一直使用类似于sum(map(lambda x:f(x), list))的东西,然后我改成了sum([f(x) for x in list]),现在我可以用sum(f(x) for x in list)。很酷。 - chuse

7
你也可以使用numpy实现的点积dot product,它在本地代码中具有大型数组优化,可以使计算速度稍微快一些。除非你特别想编写一个点积例程或避免依赖性,否则使用经过试验、广泛使用的库比自己编写要好得多。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接