【发布时间】:2011-04-20 10:33:08
【问题描述】:
试图模仿 Excel 的 SUMPRODUCT 函数:
SUMPRODUCT(v1, v2, ..., vN) =
v1[0]*v2[0]*...*vN[0] + v1[1]*v2[1]*...*vN[1] + ... + v1[n]*v2[n]*...*vN[n]
其中 n 是每个向量中的元素数。
这类似于点积,但适用于多个向量。我阅读了常规点积的the very detailed discussion,但我不知道如何干净地将其扩展到多个向量。作为参考,我正在复制那里提出的优化代码,我将其(微不足道地)移植到 Python 3。顺便说一句,对于点积,最后一种方法仍然在 P3K 中获胜。
def d0(v1,v2):
"""
d0 is Nominal approach:
multiply/add in a loop
"""
out = 0
for k in range(len(v1)):
out += v1[k] * v2[k]
return out
def d1(v1,v2):
"""
d1 uses a map
"""
return sum(map(mul,v1,v2))
def d3(v1,v2):
"""
d3 uses a starmap (itertools) to apply the mul operator on an zipped (v1,v2)
"""
return sum(starmap(mul,zip(v1,v2)))
【问题讨论】:
标签: python python-3.x algorithm