马尔可夫链蒙特卡洛(蟒蛇,numpy)

时间:2014-08-03 20:38:44

标签: python numpy montecarlo markov-chains

我正在做一些物理学研究,我需要使用马尔可夫链蒙特卡罗(MCMC)来分析一些数据。我试着自己写一个,但是当python / numpy将非常小的数字减少到零时,我会不断遇到错误。特别是当我需要做numpy.exp(-1000)之类的事情时。那个表达式本身就是一个更大的数学方程式的一部分,所以我不能只记录它。

我知道有一些MCMC模块可用于python,我已经看过其中的一些,但我很难理解他们应用它们的文档。谁能推荐一个人?我所拥有的是我插入概率分布的一列数据。这个分布还有另外两个变量,我将随机进行并记录马尔可夫链中的每一步。然后,我需要根据马尔可夫链对这两个变量中的每一个进行直方图。如果这个问题太模糊,我道歉。任何想法或建议都非常感谢,谢谢!

2 个答案:

答案 0 :(得分:2)

如果您的系统可用,请使用更高精度的浮动。例如,如果您有float128

import numpy as np
print(np.exp(np.float128(-1000)))  # 5.07595889755e-435
print(np.exp(np.float128(-10000)))  #  1.13548386531e-4343

另见longdouble。这实际上取决于您的操作系统支持的内容和方式。

您可以转换需要此精度的数组,并使用Numpy函数处理它们:

# Example array with 3 dimensions
d = np.random.uniform(-10000, -100, 24)
d.shape = (2, 3, 4)

# Cast to a higher precision
D = d.astype(np.float128)
np.exp(D[:,2])  # array([[4.263772e-4326, 4.3465066e-1474, ...

答案 1 :(得分:0)

使用PyMC - 非常棒。完成教程,您很快就会了解如何构建模型。

http://pymc-devs.github.io/pymc/tutorial.html