저는 PyMC를 사용하여 MCMC 계산을하고 있습니다. 내 데이터는 각각 24 * 1000 모양의 47 부분으로 구성됩니다.파이썬 다중 프로세스 루프
MCMC가 작동하려면 47 개 부품 중에서 큰 어레이를 생성 했으므로 이제는 (1128) * 1000 어레이를 보유하게됩니다.
그러면 맞는 모델은 동일한 크기의 배열을 만듭니다. 47 개의 각 부분에 대해로드해야하는 다른 값 (배율 인수 등)이 있으므로 루프에서이를 수행합니다.
말할 수 있습니다지도 내 배열 : 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
가 나는 속도 향상을 얻을 것입니다.
지도에서 올바른 위치에 글을 쓸 수 있도록 설정하는 방법을 모르겠다. 해결책을 찾았지만 찾지 못했습니다. 아니면 내가 찾은 것을 이해하지 못했습니다.
Markov가 작동하려면 모든 것을 한 단계에서 계산해야합니다. 그게 내가이 큰 배열을 만드는 이유입니다. 코드 예제는 느린 종류의 루프를 사용하여 모델 배열을 만드는 방법을 보여줍니다. 마르코프에는 각 단계에서 모델 배열에 영향을주는 몇 가지 자유 매개 변수가 있습니다. 그래서 각 마르코프 단계는 배열이 새롭게 만들어지고 경험적인 데이터와 비교됩니다. 데이터는 47 부분으로 구성됩니다. 각각에는 24 개의 subpart가 있습니다. 파트 1의 서브 파트 1은 파트 2의 서브 파트 1과 동일한 시간 정보를가집니다 (이를 정정 한 k 루프에 오류가 있음). –
좋아, 다음과 같이하면 속도가 빨라진다. 나는 루핑을하는 여분의 프로그램을 만들기 위해 cython을 사용하고있다. pyhon 코드를 붙여 넣는 것만으로도 두 배 빠른 속도감을 얻을 수있었습니다. –
좋아, 자네가 문제를 해결하는 중이 야. :-) – Basileios