0

PyMCを使用してMCMC計算を行っています。私のデータは、それぞれが 24 * 1000 の形状を持つ 47 個のパーツで構成されています。

MCMC を機能させるために、47 個のパーツから大きな配列を作成したので、(1128)* 1000 配列になりました。

適合するモデルは、同じサイズの配列を作成します。47 個のパーツのそれぞれに、ロードする必要がある異なる値があるため (スケーリング係数など)、これをループで実行します。

map が私の配列だとしましょう:

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 個のパーツは互いに独立しているため、マルチプロセッシングを使用すると速度が向上します。

マップの正しい位置に書き込むためにどのように設定する必要があるのか​​ わかりません。解決策を探しましたが、何かが見つかりませんでした。または、見つけたものを理解できませんでした。

4

1 に答える 1

0

私は PyMC の経験がなく、コードで何をしているのかを正確に理解するのは困難です。ただし、プロセスが独立している場合は、結果を返す関数にチェーンのすべての部分を「マップ」できるようにスクリプトを作成する必要があります。

from multiprocessing import Pool
pool = Pool(processes=8)              
result = pool.map(build_markov_chain, list_of_input_arrays)  

このようにして、結果は入力と同じ順序になります。したがって、(1128)*1000 配列を作成する代わりに、形状が 24*1000 の 47 個の配列を含むリストとして保持することをお勧めします。

于 2013-08-06T22:24:18.737 に答える