我正在使用PyMC进行MCMC计算。 我的数据由47个部分组成,每个部分的形状为24 * 1000。
为了让MCMC工作,我在47个部分中创建了一个大型阵列,所以我现在有一个(1128)* 1000阵列。
然后拟合的模型创建相同大小的数组。 它在循环中执行此操作,因为对于47个零件中的每一个,都有不同的值必须加载(如缩放因子)。
让我们说地图是我的阵列:
for i in range(len(map[::])/47):
scale = scale_all[i]
self.trans_calc["t"] = 0.
self.trans_calc.xyzPos()
pos0 = self.trans_calc.calc_pos1()
for k in range(24):
self.trans_calc["t"] = self.time[k]
self.trans_calc.xyzPos()
if self.trans_calc.onstar() == False:
curve = pos0
else:
pos1 = self.trans_calc.calc_pos1()
curve = pos0 - pos1 + 1.0 * scale
map[k+i*47] = curve
return map
由于47个部分彼此独立,如果我使用多处理,我会得到加速。
我只是不明白我必须如何设置才能在地图中写出正确的位置。 我已经搜索了一个解决方案但没找到的东西。或者我不明白我发现了什么。
答案 0 :(得分:0)
我没有使用PyMC的经验,我很难看到你在代码中做了什么。但是如果进程是独立的,你应该以一种方式编写脚本,你可以在返回结果的函数上“映射”链的每个部分。
from multiprocessing import Pool
pool = Pool(processes=8)
result = pool.map(build_markov_chain, list_of_input_arrays)
以这种方式,结果与输入的顺序相同。因此,我建议将它们保存为包含47个形状为24 * 1000的数组的列表,而不是构建一个(1128)* 1000数组。