我需要函数聚合器,它将两个列表减少到一个总数。 “项目”应该是 bool 值的向量。
所以,我写了这些函数:
def element_wise_multiplication(weights, items):
return map(lambda x, y: x * y, weights, items)
def total(weights, items):
return sum(element_wise_multiplication(weights, items))
它们在我看来还不错,但问题是分析器显示其中包含 lambda 的行负责 95% 的运行时间,因此它的性能几乎无法接受。
最有效的实现方式是什么?
附言我知道 NumPy 的数组,但我想在这个数组上使用 PyPy。或者在这种情况下不值得使用它?
请您参考如下方法:
你可以像这样用一个生成器来处理这个问题:
from itertools import izip
value = sum((x * y) for x, y in izip(weights, items))
izip 完成与内置 zip 相同的事情,但没有内存开销。
