有效地计算数组的乘积

时间:2018-12-31 18:04:47

标签: python algorithm

作为问题的一部分,我必须将列表中小于50000的{​​{1}}个数字相乘。

我通过分而治之的方法对此进行了优化

10**18

但是它仍然很慢,我想知道是否有什么办法可以提高速度。

一个例子:

def multnum(niz,l,d):
    if(l==d):
        return niz[l]
    return multnum(niz,l,(l+d)//2)*multnum(niz,(l+d)//2+1,d)

l和d变量只是辅助变量。

3 个答案:

答案 0 :(得分:0)

也许使用numpy吗?

l = np.random.randint(1, 1000, size=50000)
%timeit np.prod(l)

# 39.9 µs ± 53.7 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

另一方面,使用python

ll = list(l)
%timeit multnum(ll, 0, 50000-1)
# 22.2 ms ± 108 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

因此在这种情况下,numpy的速度要快500倍左右。

答案 1 :(得分:0)

math.fsum(np.log(niz)),然后取幂---或检查是否可以继续在日志空间中工作。

答案 2 :(得分:-2)

我对l和d所代表的含义有点模糊.Numpy为此内置了一个程序包。

import numpy as np
np.prod(niz)