试图模仿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是每个向量中的元素数。
这类似于点积,但适用于多个向量。 我阅读了常规点积的详细讨论,但我不知道如何将它干净地扩展到多个向量。 作为参考,我正在复制那里提出的优化代码,我将其移植到Python 3. BTW,对于dot产品,最后一种方法仍然在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)))