我需要从以下函数中采样:
p = p1* p2* p3*p4
其中 p1 和 p2 是具有相同 sigma 但均值不同的高斯函数。但是 p3 和 p4 都等于 1/(2*(pi)),都是常数函数。
p3 和 p4 在区间 -pi 到 pi 中定义。
在输出中,我需要组成 p 的 p1、p2、p3 和 p4 中的四个变量。但是,如果函数是常数,我如何对 p3 和 p4 的变量进行采样呢?
我能够使用下面代码中的 emcee Python 包从 p = p1 * p2 中采样。
from random import sample
import numpy as np
from ROOT import *
import emcee
from math import log10
import ROOT as root
def log_mmc(x,etx,ety):
return log10((1/(4*3.1415**2))*root.TMath.Gaus(x[0],etx,5)*root.TMath.Gaus(x[1],ety,5))
ndim, nwalkers = 4, 100
p0 = np.random.randn(nwalkers, ndim)
sampler = emcee.EnsembleSampler(nwalkers, ndim, log_mmc, args=[12,8])
sampler.run_mcmc(p0, 50000)
samples = sampler.get_chain(flat=True`)
所以 p 如上面代码中定义的那样,我没有费心对其进行规范化,因为 mcmc 不需要它。但是我找不到一种方法来从中采样变量 x[2] 和 x[3],并在它们的值中设置应该是 -pi 到 pi 的界限。
我怎样才能做到这一点?