鉴于如果列表中没有 0,我们可以轻松地将列表中项目的乘积与列表中项目的对数之和进行转换,例如:
>>> from operator import mul
>>> pn = [0.4, 0.3, 0.2, 0.1]
>>> math.pow(reduce(mul, pn, 1), 1./len(pn))
0.22133638394006433
>>> math.exp(sum(0.25 * math.log(p) for p in pn))
0.22133638394006436
我们应该如何处理列表和 Python 中有 0 的情况 (以编程和数学正确的方式)?
更具体地说,我们应该如何处理以下情况:
>>> pn = [0.4, 0.3, 0, 0]
>>> math.pow(reduce(mul, pn, 1), 1./len(pn))
0.0
>>> math.exp(sum(1./len(pn) * math.log(p) for p in pn))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <genexpr>
ValueError: math domain error
返回 0 真的是处理这个问题的正确方法吗?什么是优雅的解决方案,让我们考虑列表中的 0 但最终不为 0?
因为它是某种几何平均值(列表的乘积),当我们仅仅因为列表中只有一个 0 而返回 0 时,它并不完全有用。
从 Math Stackexchange 溢出: https ://math.stackexchange.com/questions/1727497/resolving-zeros-in-product-of-items-in-list ,数学人没有回答,也许 python/code Jedis 有解决这个问题的更好的想法。