我在1000000整数的数据集上尝试了一个简单的reduce函数, 这是我正在尝试做的事情,
from functools import reduce
a = (x for x in range(1,1000000))
reduce(lambda x,y: x*y,a)
问题是,这需要花费很多时间!有没有更快的方法来实现这个大小的数据集?
答案 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