首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >itertools.ifilter与IPython并行

itertools.ifilter与IPython并行
EN

Stack Overflow用户
提问于 2016-01-18 12:59:46
回答 1查看 166关注 0票数 4

对于一些被证明是NP难的问题,我没有其他选择,只有穷尽的搜索。为了简单起见,我有一组数据-- S = ['A', 'B', 'C', ... ,'Z'],并希望将函数f应用于该集长度N < len(S)的所有子集。我不能在这里使用列表,因为二项式系数binom(len(S),N)大约有几十亿。但是,对于几乎所有的f(x), x∈S值,S的结果都为零。因此,在简单的情况下,所有的

代码语言:javascript
复制
   from itertools import ifilter, combinations
   answer = list(ifilter(lambda x: f(x) > 0, combinations(S,N)))

但在现实生活中,len(S) ~ 10⁴N ~ 10²。我想要的是使用ipyparallel在CPU引擎之间扩展工作。我有一个有100个CPU核心的小型集群。但我仍然不能将组合存储为列表,因此我需要一些类似独立生成器的东西。

有一个关于如何将生成器拆分为块的couple of examples,但据我所知,它们仍然是连续的生成器。还有一个@minrk的idea是相关的,但由于某种原因,它的性能确实很差。

所以问题是:

  • 有任何方法直接用itertools.ifilter实现ipyparallel吗?或
  • 是否有可能将python生成器分离成一组独立的生成器(将它们独立地发送到ipcluster引擎)?
EN

回答 1

Stack Overflow用户

发布于 2016-08-18 17:59:35

彻底的搜索在这里是完全没有希望的,无论你如何并行它。在len(S)N这样高数量级的情况下,您需要搜索大约6e241解决方案候选人。这远远超出了人类所能期望建立的任何计算系统的能力。

您需要使用更聪明的算法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34855403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档