编程片段

设置种子值的意义

为了可重复性:

np.random.seed(1)  # for repeatability

约定俗成的变量命名

ndim = 1            # number of dimensions or parameters
                    # number of clusters: 簇的数量
                    # cluster number:簇号

原则上变量名要和对应的其现实意义甚至物理意义相关联。

nburn = 1000
            # 'burn_in' period to let chains stabilize
samples = sampler.chain[:, nburn:, :].ravel()
            # 实现其burn的意义

prefer 避免重复计算 to 形式上的简单

p(x⃗ )exp[12(x⃗ μ⃗ )TΣ1(x⃗ μ⃗ )]

def lnprob(x, mu, icov):
    diff = x-mu
                    # 提前定义变量的目的是为了避免二次计算
    return -np.dot(diff, np.dot(icov, diff))/2

矩阵的创建

>>> p0 = np.random.rand(nwalkers * ndim).reshape((nwalkers, ndim))
            # 这样做的效率会否高于np.random.rand(nwalkers, ndim)?
            # 留待以后考证吧 

高维数据的可视化

如何进行高维数据的可视化:一维一维的,可能最为老土,但至少是一种勉强可行的方案:

for i in range(ndim):
    plt.figure()
    plt.hist(sampler.flatchain[:, i], 100, histtype='step')
    plt.title('Dimension {0:d}'.format(i))
plt.show()

python 将含义相同的变量放在一行进行定义

nwalkers, ndim = 250, 50 nburn, nsteps = 1000, 2000

disp=0

在一些函数(尤其相关最优化函数)的参数设置中,常有disp这一可选参数,表示是否显示优化过程中的中间呢信息。

from scipy import optimize
optimize.fmin(neg_log_likelihood, x0, args=(), disp=0)
                                # 也即默认disp=1,
                                # 也即会显示中间信息

变量的意义

starting_guess, pos0, p0

from emcee import EnsembleSampler
sampler = EnsembleSampler(……)
sampler.run_mcmc(pos0=, )

y~ :y_tilde,y 一弯
y^ :y_hat, y 尖儿

你可能感兴趣的:(编程片段)