我回答了similar question previously。我在这里提到的很多东西(不计算每次迭代的当前可能性,预先计算随机创新等等)都可以在这里使用。在

实现的其他改进是不使用列表来存储示例。相反,您应该为样本预先分配内存,并将它们存储为数组。类似samples = np.zeros(n_samples)的方法比在每次迭代时追加到列表中更有效。在

你已经提到你试图通过不记录老化样本来提高效率。这是个好主意。您也可以通过只记录每m个样本来完成类似的细化操作,因为无论如何,您在return语句中使用np.array(sample_list)[::m]丢弃这些样本。你可以通过改变:# do not add burn-in samples

if n_sampled > burn_in:

sample_list.append(z)

^{pr2}$

还值得注意的是,您不需要计算min(1, p(cand) / p(z)),只需计算p(cand) / p(z),就可以逃脱惩罚。我意识到形式上min是必要的(以确保概率在0和1之间有界)。但是,计算上,我们不需要最小值,因为如果p(cand) / p(z) > 1,那么{}总是大于u。在

把这一切放在一起,并预先计算随机创新,接受概率u,只有在你真的需要我想出的时候才计算可能性:def my_Metropolis_Gaussian(p, z0, sigma, n_samples=100, burn_in=0, m=1):

# Pre-allocate memory for samples (much more efficient than using append)

samples = np.zeros(n_samples)

# Store initial value

samples[0] = z0

z = z0

# Compute the current likelihood

l_cur = p(z)

# Counter

iter = 0

# Total number of iterations to make to achieve desired number of samples

iters = (n_samples * m) + burn_in

# Sample outside the for loop

innov = np.random.normal(loc=0, scale=sigma, size=iters)

u = np.random.rand(iters)

while iter < iters:

# Random walk innovation on z

cand = z + innov[iter]

# Compute candidate likelihood

l_cand = p(cand)

# Accept or reject candidate

if l_cand / l_cur > u[iter]:

z = cand

l_cur = l_cand

# Only keep iterations after burn-in and for every m-th iteration

if iter > burn_in and iter % m == 0:

samples[(iter - burn_in) // m] = z

iter += 1

return samples

如果我们看一下性能,我们会发现这个实现比原来的实现快了两倍,这对于一些小的改变来说并不坏。在In [1]: %timeit Metropolis_Gaussian(pdf_t, 3, 1, n_samples=100, burn_in=100, m=10)

205 ms ± 2.16 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [2]: %timeit my_Metropolis_Gaussian(pdf_t, 3, 1, n_samples=100, burn_in=100, m=10)

102 ms ± 1.12 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

python运行mcmc为何老出错_为什么我的metropolis算法(mcmc)的python实现这么慢?相关推荐

  1. python运行mcmc为何老出错_python中mcmc方法的实现

    MCMC方法在贝叶斯统计中运用很多,MIT发布的EMCEE是实现的比较好的.介绍页面在下面.源代码中examples里的代码可以帮助理解各种功能,特别是line.py 列出了最小二乘法,最大似然法和M ...

  2. python运行对电脑的要求_这样运行Python命令会给电脑带来极大的隐患

    Python已经成为全球最受欢迎的编程语言之一.原因当然是Python简明易用的脚本语法,只需把一段程序放入.py文件中,就能快速运行. 而且Python语言很容易上手模块.比如你编写了一个模块my_ ...

  3. python中常用的序列化模块_第六章 常用模块(5):python常用模块(序列化模块:pickle,json,shelve,xml)...

    6.3.7 序列化模块 (pickle,json,shelve,xml) 文件写入,数据传输时,我们都是以字符串形式写入的(因为字符串可以encode成bytes). 那其他类型(比如字典,列表等)想 ...

  4. bit是python最快的bitcoin库_新的Bitcoinpython节点比以前的Python库快100倍

    3月27日,Bitcoin Cash(BCH)粉丝认识了用Python编程语言编写的新BCH完整节点. 该项目名为Bitcoinpython,是一个现代化的BCH库,其创建者声称它是速度最快的Pyth ...

  5. python如何赚外快 淘宝_业余时间怎么赚外快?用Python赚钱的5个方法!

    Python作为一门编程语言,一门技术,就一定能够为我们所用,至少赚个外快是绝对没有问题的. 渠道一:淘宝搜python程序 可以到淘宝上搜,Python程序,到相应的店里找客服,就说你想做程序开发, ...

  6. python运行mcmc为何老出错_python – 使用pyMCMC / pyMC对数据/观察结果设置非线性函数...

    我试图用高斯(和更复杂)的功能来适应一些数据.我在下面创建了一个小例子. 我的第一个问题是,我做对吗? 我的第二个问题是,如何在x方向添加错误,即在观察/数据的x位置? 很难找到关于如何在pyMC中进 ...

  7. python运行mcmc为何老出错_Python可视化解析MCMC

    马尔可夫链可以定义为一个随机过程Y,其中t时刻各点的值只取决于t-1时刻的值.这意味着随机过程在t时刻有状态x的概率,给定它所有的过去状态,等于在t时刻有状态x的概率,给定它在t-1时刻的状态. 如果 ...

  8. python运行程序为什么会卡住_为什么我的 Python 程序卡住啦!

    本文简答介绍在linux环境下如何利用gdb来分析卡住的程序,本文使用的Python为Cpython2.7,操作系统为Debian. 阻塞在IO 程序被卡住,很可能是程序被阻塞了,即在等待(wait) ...

  9. mysql环境搭载后老出错_使用Docker在window10下搭建SWOFT开发环境,mysql连接错误

    使用Docker在window10下搭建SWOFT开发环境,mysql连接错误 { "code": 0, "error": "(Swoft\\Db\\ ...

最新文章

  1. centos 6.8 编译安装git 2.11.0
  2. django ---- models继承
  3. python dlib学习(六):训练模型
  4. python pycharm 如何绘制类图 关系图 继承图 父子图?
  5. 增加话务系统功能感想
  6. 数据库开发——MySQL——pymysql模块
  7. MySQL(五)MySQL事务
  8. LRU LeetCode
  9. physx选择显卡还是cpu_预算有限,该侧重CPU还是显卡?中高端游戏主机这样配
  10. Does Rails Hurt?
  11. linux桌面环境与窗口管理器,窗口管理器和桌面环境的区别 | MOS86
  12. linux修改ip配置文件路径,Centos7系统如何修改IP地址
  13. java中如何切割图片_Java 切割图片代码
  14. 对于NAS,IP SAN以及iSCSCI SAN存储的一些认识和理解
  15. 年底换机潮来了,都有哪些手机受欢迎?
  16. 注册测绘师学习笔记7
  17. LwM2M(轻量级M2M)协议
  18. excel合并两列内容_一起来学习Excel表格两列合并一列的两种方法
  19. 模糊控制理论理解与综述
  20. 二级域名三级域名设置方法

热门文章

  1. jsTree自定义contextmenu
  2. 如何利用快递单号查询全部的物流信息并导出
  3. The Record of Reminding myself
  4. 网络编程1 TCP服务器
  5. UE4 版本升级记录和一些Bug处理笔记
  6. 超链接一般有两种表现形式_超链接的类型
  7. linux用户与组的管理(命令添加、手动添加、添加组、用户之间的切换)
  8. npm警告:WARN config init.module Use `--init-module` instead.
  9. 使用Sonarqube扫描Javascript代码
  10. 伊神人事档案管理系统