使用reduce函数

时间:2017-03-02 11:06:54

标签: python python-3.x reduce bigdata

我在1000000整数的数据集上尝试了一个简单的reduce函数, 这是我正在尝试做的事情,

from functools import reduce
a = (x for x in range(1,1000000))
reduce(lambda x,y: x*y,a)
问题是,这需要花费很多时间!有没有更快的方法来实现这个大小的数据集?

1 个答案:

答案 0 :(得分:2)

这里的主要问题是结果的大小使得计算需要记录。基本上,python可以处理你的内存允许的数字,这意味着它只受你的记忆限制。请注意,随着数字越来越大,所有操作的成本都会增加。据我所知,reduce()函数是执行此任务的最常用方法。但是,由于您只需要特定数字的阶乘,您可以使用内置math.factorial()函数: 这远远快于reduce(),这是因为python的math模块函数是用C实现的。

In [52]: %timeit math.factorial(10000)
100 loops, best of 3: 2.67 ms per loop

In [53]: %timeit reduce(mul, range(1, 10000))
10 loops, best of 3: 20.6 ms per loop