【发布时间】:2019-10-24 14:26:41
【问题描述】:
我正在研究复杂网络的图表和大型数据集。我使用 ndlib 库对它们运行 SIR 算法。 但每次迭代需要 1Sec 之类的时间,它使代码需要 10-12 小时才能完成。 我想知道有没有办法让它并行化? 代码如下所示
这行代码是核心:
sir = model.infected_SIR_MODEL(it, infectionList, False)
有什么简单的方法让它在多线程或并行上运行?
count = 500
for i in numpy.arange(1, count, 1):
for it in model.get_nodes():
sir = model.infected_SIR_MODEL(it, infectionList, False)
每次迭代:
for u in self.graph.nodes():
u_status = self.status[u]
eventp = np.random.random_sample()
neighbors = self.graph.neighbors(u)
if isinstance(self.graph, nx.DiGraph):
neighbors = self.graph.predecessors(u)
if u_status == 0:
infected_neighbors = len([v for v in neighbors if self.status[v] == 1])
if eventp < self.BetaList[u] * infected_neighbors:
actual_status[u] = 1
elif u_status == 1:
if eventp < self.params['model']['gamma']:
actual_status[u] = 2
【问题讨论】:
-
这取决于 - 迭代是否独立?只有其中一个是独立的 - 哪一个?或者
model在迭代过程中会发生变化吗? -
在每个节点进程上都有一个 for 和它。我认为它们是独立的。一个接一个@MarekSchwarz
-
模型是静态的
-
问题是,如果在处理过程中,
model是否以某种方式改变了......?或者,如果您可以独立于i=100运行i=10。好的.. -
而
infectionList也是静态的?
标签: python python-3.x graph parallel-processing