itertools.ifilter和IPython P

2024-04-25 10:07:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

   from itertools import ifilter, combinations
   answer = list(ifilter(lambda x: f(x) > 0, combinations(S,N)))

但在现实生活中,len(S) ~ 10⁴和{}。我想要的是使用ipyparallel在CPU引擎之间分散工作。我有一个有100个CPU核心的小集群。但我仍然无法将组合存储为列表,因此我需要一些类似单独生成器的东西。在

有一个coupleexamples如何将生成器分成块,但据我所知,它们仍然是连续的生成器。还有一个@minrk的idea与此相关,但由于某些原因它的性能非常差。在

所以问题是:

  • 有没有办法直接用ipyparallel实现itertools.ifilter
  • 是否可以将python生成器分离为一组独立的生成器(将它们独立地发送给ipcluster引擎)?在

Tags: 数据函数引擎证明列表lennp情况
1条回答
网友
1楼 · 发布于 2024-04-25 10:07:12

在这里,彻底的搜索是完全没有希望的,不管你如何并行。由于len(S)和{}的数量级如此之高,您需要搜索大约6e241个候选解决方案。这远远超出了人类希望建立的任何计算系统的能力。在

你需要使用更智能的算法。在

相关问题 更多 >

    热门问题