Seriously Kick-Ass MCMC¶
emcee is an MIT licensed pure-Python implementation of Goodman & Weare’s
Affine Invariant Markov chain Monte Carlo (MCMC) Ensemble sampler and these pages will
show you how to use it.
This documentation won’t teach you too much about MCMC but there are a lot
of resources available for that (try this one).
We also published a paper explaining
emcee algorithm and implementation in detail.
emcee has been used in quite a few projects in the astrophysical literature and it is being actively developed on GitHub.
If you wanted to draw samples from a 10 dimensional Gaussian, you would do something like:
import numpy as np import emcee def lnprob(x, ivar): return -0.5 * np.sum(ivar * x ** 2) ndim, nwalkers = 10, 100 ivar = 1. / np.random.rand(ndim) p0 = [np.random.rand(ndim) for i in range(nwalkers)] sampler = emcee.EnsembleSampler(nwalkers, ndim, lnprob, args=[ivar]) sampler.run_mcmc(p0, 1000)
A more complete example is available in the quickstart documentation.
- Example: Fitting a Model to Data
- Advanced Patterns
- Parallel-Tempering Ensemble MCMC
Direct contributions to the code base:
- Ruth Angus (Oxford)
- Bence Béky (Harvard)
- Frederik Beaujean (MPI for Physics)
- Alex Conley (U Colorado, Boulder)
- Will Meierjurgen Farr (Northwestern)
- Júlio Hoffimann Mendes (Federal University of Pernambuco)
- David W. Hogg (NYU)
- Dustin Lang (Princeton/CMU)
- Phil Marshall (Oxford)
- Demitri Muna (OSU)
- Adrian Price-Whelan (Columbia)
- Jeremy Sanders (Cambridge)
- Leo Singer (Caltech)
- Manodeep Sinha (Vanderbilt)
- Marco Tazzari (ESO)
- Erik Tollerud (STScI)
- Simon Walker
- Peter K. G. Williams (CfA)
- Joe Zuntz (Oxford)
Comments, corrections & suggestions:
- Eric Agol (UWash)
- Jo Bovy (IAS)
- Andrew Bradshaw (UC Davis)
- Jacqueline Chen (MIT)
- John Gizis (Delaware)
- Jonathan Goodman (NYU)
- Jennifer Piscionere (Vanderbilt)
License & Attribution¶
Copyright 2010-2013 Dan Foreman-Mackey and contributors.
emcee is free software made available under the MIT License. For details see LICENSE.
- Removing dependence on
- Added arguments to
- Added automatic load-balancing for MPI runs.
- Added custom load-balancing for MPI and multiprocessing.
- New default multiprocessing pool that supports
- Re-licensed under the MIT license!
- Clearer less verbose documentation.
- Added checks for parameters becoming infinite or NaN.
- Added checks for log-probability becoming NaN.
- Improved parallelization and various other tweaks in
- Added a parallel tempering sampler
- Added instructions and utilities for using
flatlnprobabilityproperty to the
EnsembleSamplerobject to be consistent with the
- Updated document for publication in PASP.
- Various bug fixes.
- Made the packaging system more robust even when numpy is not installed.
- Another bug fix related to metadata blobs: the shape of the final
blobsobject was incorrect and all of the entries would generally be identical because we needed to copy the list that was appended at each step. Thanks goes to Jacqueline Chen (MIT) for catching this problem.
- Fixed bug related to metadata blobs. The sample function was yielding
blobsobject even when it wasn’t expected.
- Allow the
lnprobfnto return arbitrary “blobs” of data as well as the log-probability.
- Python 3 compatible (thanks Alex Conley)!
- Various speed ups and clean ups in the core code base.
- New documentation with better examples and more discussion.
- Fixed transpose bug in the usage of
- Initial release.