【发布时间】:2014-04-04 11:59:18
【问题描述】:
我正在寻找一种将数组拆分为具有相似直方图的块的有效方法。
例如,给定数组:
l = np.array([1, 2, 3, 4, 1, 1, 1, 2, 3, 4, 55, 5, 5, 5, 5, 5, 3, 2, 2, 21, 2])
我想获得:
c1 = np.array([1, 4, 1, 5, 5, 3, 2])
c2 = np.array([2, 1, 3, 4, 5, 5, 2])
c3 = np.array([3, 1, 2, 55, 5, 2, 21])
不仅如此,每个块在给定函数 f 上应该具有相似的大小和相似的总和:
1. |sum(ci, f) - sum(cj, f)| < e, for i != j
2. |len(ci) - len(cj)| < e, for i != j
在哪里
sum(c, f) = f(c[0]) + ... + f(c[len(c)])
编辑:
澄清这样做的意图。我想将列表中的进程并行化为n 子进程,但成本必须在每个子进程之间平均分配。处理此列表中的元素的成本是数组l 中同一位置的整数的函数f,其中f 是过程的计算复杂度。例如,f(i)=i^2。因此,我希望所有进程都具有相同的计算成本,并且不要让进程过早完成而其他进程永远持续下去。
【问题讨论】:
-
请分享你如何得到上面的c1、c2和c3。
-
终于,终于。谢谢你,先生,提供了一个minimal的例子。
-
@mskimm:我是手动完成的。获得它们的方法正是我要问的......
-
如果您需要并行化一系列作业。为什么不能将原始数组用作所有工作人员的队列?
-
@M4rtini:是的,原因是我使用的是Condor(分布式计算框架),所以我没有任务池。我需要事先指定任务(在将作业提交到 Condor 的服务器之前)。