【问题标题】:reduce large dataset in python using reduce function使用reduce函数减少python中的大型数据集
【发布时间】:2017-03-02 11:06:53
【问题描述】:

我在 1000000 个整数的数据集上尝试了一个简单的 reduce 函数, 这就是我想要做的,

from functools import reduce
a = (x for x in range(1,1000000))
reduce(lambda x,y: x*y,a)

问题是,这需要很多时间!有没有更快的方法来实现这种大小的数据集?

【问题讨论】:

  • 告诉我们更多关于减少的意思?这是否意味着您有一个整数列表,并且您想制作给定列表的单独列表?或其他任何东西。你听起来不太清楚。

标签: python python-3.x reduce bigdata


【解决方案1】:

这里的主要问题是您的结果大小导致计算需要如此日志。基本上,python 可以处理内存允许的数字,这意味着它只受内存的限制。请注意,随着数字变大,所有操作的成本都会增加。据我所知,reduce() 函数是完成这项任务的最 Python 方式。但仍然因为您只想要特定数字的阶乘,您可以使用内置 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

【讨论】:

  • 你能解释一下为什么这比 OP 写的代码要快吗?
  • 你不应该创建一个生成器,你可以将'range(1,1000000)'作为参数传递给'accumulate'。累积(范围(1,1000000),mul)
  • 我如何在累积中获得减少的结果集/最后一个值
  • @OleksandrDashkov 确实,我错过了!
  • @user2717058 抱歉,您所说的 educed resultset/last 是什么意思?
猜你喜欢
  • 2021-03-26
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-06
  • 2020-06-27
相关资源
最近更新 更多