Efficiently sample from the Polya-Gamma distribution using NumPy's Generator interface
Project description
polya-gamma
Efficiently generate samples from the Polya-Gamma distribution using a NumPy/SciPy compatible interface.
Features
polyagamma
is written in C and optimized for performance.- It is flexible and allows the user to sample using one of 4 available methods.
- Input parameters can be scalars, arrays or both; allowing for easy generation of multi-dimensional samples without specifying the size.
- Random number generation is thread safe.
- The functional API resembles that of common numpy/scipy functions, therefore making it easy to plugin to existing libraries.
Dependencies
- Numpy >= 1.17
Installation
To get the latest version of the package, one can install it by downloading the wheel/source distribution
from the releases page, or using pip
with the following shell command:
$ pip install -U polyagamma
Alternatively, once can install from source by cloning the repo. This requires an installation of poetry and the following shell commands:
$ git clone https://github.com/zoj613/polya-gamma.git
$ cd polya-gamma/
$ poetry install
# add package to python's path
$ export PYTHONPATH=$PWD:$PYTHONPATH
Example
Python
import numpy as np
from polyagamma import polyagamma
o = polyagamma()
# Get a 5 by 10 array of PG(1, 2) variates.
o = polyagamma(z=2, size=(5, 10))
# Pass sequences as input. Numpy's broadcasting rules apply here.
h = [[1, 2, 3, 4, 5], [9, 8, 7, 6, 5]]
o = polyagamma(h, 1)
# Pass an output array
out = np.empty(5)
polyagamma(out=out)
print(out)
# one can choose a sampling method from {devroye, alternate, gamma, saddle}.
# If not given, the default behaviour is a hybrid sampler that picks a method
# based on the parameter values.
o = polyagamma(method="saddle")
# We can also use an existing instance of `numpy.random.Generator` as a parameter.
# This is useful to reproduce samples generated via a given seed.
rng = np.random.default_rng(12345)
o = polyagamma(random_state=rng)
C
For an example of how to use polyagamma
in a C program, see here.
Contributing
All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome.
To submit a PR, follow the steps below:
- Fork the repo.
- Setup the dev environment with
poetry install
. All dependencies will be installed. - Start writing your changes, including unittests.
- Once finished, run
make install
to build the project with the new changes. - Once build is successful, run tests to make sure they all pass with
make test
. - Once finished, you can submit a PR for review.
References
- Luc Devroye. "On exact simulation algorithms for some distributions related to Jacobi theta functions." Statistics & Probability Letters, Volume 79, Issue 21, (2009): 2251-2259.
- Polson, Nicholas G., James G. Scott, and Jesse Windle. "Bayesian inference for logistic models using Pólya–Gamma latent variables." Journal of the American statistical Association 108.504 (2013): 1339-1349.
- J. Windle, N. G. Polson, and J. G. Scott. "Improved Polya-gamma sampling". Technical Report, University of Texas at Austin, 2013b.
- Windle, Jesse, Nicholas G. Polson, and James G. Scott. "Sampling Polya-Gamma random variates: alternate and approximate techniques." arXiv preprint arXiv:1405.0506 (2014)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for polyagamma-1.0.0-cp39-cp39-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6fac5f063361a69792f05dc3ba74e609389ba8479ff495b359331559d9d46d1c |
|
MD5 | eec84bb9d48f0ae125214e705fd00fe1 |
|
BLAKE2b-256 | 483c0dd920f01c9ad4afef00984977e0a4179fcc524772d259cf9b7e87301fad |
Hashes for polyagamma-1.0.0-cp39-cp39-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | afcaa9d523734f154388a08cb40af6dbeb705f420ed7d99d8124c47ecd05ac7d |
|
MD5 | 786ce66ebc8b7ac0ef1e543a594fef2b |
|
BLAKE2b-256 | 66b97a356dc89e82dd5fa26ceaa73eaea1afa224d08bd31eb6d0b8699ea38ca6 |
Hashes for polyagamma-1.0.0-cp39-cp39-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1fc5bdbcc1e37b7657e4554aaf84c27f3a34fac3e9dce87726857663386582f |
|
MD5 | d4879b312e08b03e3c9ae7ab086f8e3d |
|
BLAKE2b-256 | 462aad7784cb9a72d33c7aabbf9b4d80fe4e59251ef6cc0d387e0856b1697c71 |
Hashes for polyagamma-1.0.0-cp39-cp39-manylinux1_x86_64.manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f8466af0c1b03b7edd82211a805abe540e3e52713a97f9d8a9244100fda96ae8 |
|
MD5 | ebe5db4fbbae03c5c8a1d707aed27403 |
|
BLAKE2b-256 | 0bb179a536fa97ea207f43872f789e4664dadc6d4755c2237b73761fe3c95d98 |
Hashes for polyagamma-1.0.0-cp38-cp38-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e3d6213255cca979b0e79cf3a29730d458c73fb0766f19d0135270c2f5dc34e3 |
|
MD5 | 21e200cbf4d43e2ab6da9039ee32fe98 |
|
BLAKE2b-256 | 73b8d38062810810e3a3c12476c6ccb027b60529154d0e2ef53d03825c893604 |
Hashes for polyagamma-1.0.0-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 622f8fb41141910a991816b62f463e89f784cc6e6f1061ab32df05b5c8ca6309 |
|
MD5 | 27e14a40af17b4391a413e2d8ede09ea |
|
BLAKE2b-256 | f775c585e6235dd2b8179d138facb30ddd56b4d0a26b01e3287a158d71fe548d |
Hashes for polyagamma-1.0.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 97764888b840af40b047c78856bc7fd4f5a560e13d41f460808c67f21e760900 |
|
MD5 | 3233bca96b2b254d8c8b76ba6d95d41f |
|
BLAKE2b-256 | d7b48ed5a54488019f0753b9afcbdaba3421bf9ccf611df8a3c7f9ee5194d436 |
Hashes for polyagamma-1.0.0-cp37-cp37m-manylinux2010_x86_64.manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6fdee4d313a57c631b14d0cd764752e2fbf65f71ebeee832e0d12bdb68f3a5e9 |
|
MD5 | 9bbc92c31487a4fdef2673b0a7a7e6e4 |
|
BLAKE2b-256 | a09fcc8b89002f74c859b76fcfdafb921c9d161faddd1b01cc8a5bacfe161290 |
Hashes for polyagamma-1.0.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8975cdbb8322a2f24d163560fc0e55301170175d8ca23d96ee60bf49955371f3 |
|
MD5 | 33a8f5914f60cd679e1397f439e68eef |
|
BLAKE2b-256 | 9b6959f01e2f4de396e1f3d9c924346868ff7a26ca1b5ef7d53cc29005e20d3d |
Hashes for polyagamma-1.0.0-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b22063aaa5b1f559f07c7e70571f577c224c8aad31d316ce08fe5fbae2cb2ae |
|
MD5 | b5b0df820c5ee2174e28ac90c0e046c5 |
|
BLAKE2b-256 | 7648e9861771f2ccb3484efcf69ec074abf36bc18610e9b199bd75ec1a4d3e1f |
Hashes for polyagamma-1.0.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6217d022b65990cbd0d0d5d270d62b750ee047812609049a19eea1ad81c41c49 |
|
MD5 | 5a19156494c5410868e8064ccfda6cca |
|
BLAKE2b-256 | 3df2cce933a1c70c19a7bc68270ba300d8efbbc30c5b13874b4597a6687c418d |
Hashes for polyagamma-1.0.0-cp36-cp36m-manylinux2010_x86_64.manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e43e4875fb0c9976e31d5d316e9150aac18ac2399c89070bc288bd59caf12170 |
|
MD5 | ee73f0e81363a5601a79019e50686ece |
|
BLAKE2b-256 | 41afa585afd5420f931387c6b3cccaae12f5b5df906224fe2ed966ed9effc8e9 |
Hashes for polyagamma-1.0.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b5c33f47b9583495ba44307f0ee3163ef2732337bc7839479b4ce76f765c5f6 |
|
MD5 | 72f270d18042160e5f709a5123c6ece5 |
|
BLAKE2b-256 | 4be80485caceb6d97930f8b9c0cf16d4178dab033d2497d9defa7337c5d4ba29 |