LHS-MDU
Installation
You can install lhsmdu using pip::
$ pip install lhsmdu
Alternatively, you can clone on github and then install the package locally::
$ git clone https://github.com/sahilm89/lhsmdu
$ cd lhsmdu
$ python setup.py install --user # for this user only.
or::
$ pip install git+https://github.com/sahilm89/lhsmdu --user
Basics
This is a package for generating latin hypercube samples with multi-dimensional uniformity.
To use, simply do::
>>> import lhsmdu
>>> k = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity
This will generate a nested list with 2 variables, with 20 samples each.
To plot and see the difference between Monte Carlo and LHS-MDU sampling for a 2 dimensional system::
>>> l = lhsmdu.createRandomStandardUniformMatrix(2, 20) # Monte Carlo sampling
>>> k = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity
>>> k = np.array(k)
>>> l = np.array(l)
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.gca()
>>> ax.set_xticks(numpy.arange(0,1,0.1))
>>> ax.set_yticks(numpy.arange(0,1,0.1))
>>> plt.scatter(k[0], k[1], color="g", label="LHS-MDU")
>>> plt.scatter(l[0], l[1], color="r", label="MC")
>>> plt.grid()
>>> plt.show()
You can use the strata generated by the algorithm to sample again, if you so desire. For this, you can do::
>>> m = lhsmdu.resample()
>>> n = lhsmdu.resample()
>>> o = lhsmdu.resample()
This will again generate the same number of samples as before, a nested list with 2 variables, with 20 samples each.
You can plot these together and see the sampling from the strata:: >>> m = np.array(m) >>> n = np.array(n) >>> o = np.array(o)
>>> fig = plt.figure()
>>> ax = fig.gca()
>>> ax.set_xticks(numpy.arange(0,1,0.1))
>>> ax.set_yticks(numpy.arange(0,1,0.1))
>>> plt.title("LHS-MDU")
>>> plt.scatter(k[0], k[1], c="g", label="sample 1")
>>> plt.scatter(m[0], m[1], c="r", label="resample 2")
>>> plt.scatter(n[0], n[1], c="b", label="resample 3")
>>> plt.scatter(o[0], o[1], c="y", label="resample 4")
>>> plt.grid()
>>> plt.show()
Alternatively, you can choose to get new strata each time, and see the sampling hence::
>>> p = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity
>>> q = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity
>>> r = lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity
>>> p = np.array(p)
>>> q = np.array(q)
>>> r = np.array(r)
>>> fig = plt.figure()
>>> ax = fig.gca()
>>> ax.set_xticks(numpy.arange(0,1,0.1))
>>> ax.set_yticks(numpy.arange(0,1,0.1))
>>> plt.title("LHS-MDU")
>>> plt.scatter(k[0], k[1], c="g", label="sample 1")
>>> plt.scatter(p[0], p[1], c="r", label="sample 2")
>>> plt.scatter(q[0], q[1], c="b", label="sample 3")
>>> plt.scatter(r[0], r[1], c="y", label="sample 4")
>>> plt.grid()
>>> plt.show()
===========================================================================================
Changing the random seed
You will notice that the strata generated are the same each time you run the program again. This is because the random seed is a global constant set to a default value by design, so that simulations can be replicated. In order to change this behavior, you can set a new random seed using the following code::
>>> randSeed = 11 # random number of choice
>>> lhsmdu.setRandomSeed(randSeed) # Latin Hypercube Sampling with multi-dimensional uniformity
>>> lhsmdu.sample(2, 20) # Latin Hypercube Sampling with multi-dimensional uniformity
Alternatively, you can also set the seed by using sample with a new seed::
>>> lhsmdu.sample(2, 20, randomSeed=randSeed) # Latin Hypercube Sampling with multi-dimensional uniformity
To change the random seed in every run, you can set on top of the program::
>>> lhsmdu.setRandomSeed(None)
Sampling from arbitrary CDFs
After uniformly distributed samples have been generated from LHSMDU, you can convert these to samples from arbitrary distributions using inverse tranform sampling. In this, the CDF [0,1] of the distribution of interest is inverted, and then data points corresponding to the uniformly sampled points are picked up. To do this, you must have a rv_contiuous or rv_discrete distribution instance taken from scipy.stats. You can also use frozen distributions (after setting loc and scale parameters). Following is an example for normal distribution.::
>>> import scipy.stats.distributions as ssd
>>> p = ssd.norm
>>> new_samples = lhsmdu.inverseTransformSample(p, k[0])
>>> plt.hist(new_samples[0])
>>> plt.show()
Citing this repository
To cite, please cite both the original paper from Deutsch and Deutsch: http://dx.doi.org/10.1016%2Fj.jspi.2011.09.016. and the repository: https://doi.org/10.5281/zenodo.3929531
Metadata
Release files for lhsmdu 1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lhsmdu-1.1.tar.gz | 5.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lhsmdu-1.1-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 10.6 kB
Release files / lhsmdu-1.1.tar.gz
| Download URL | lhsmdu-1.1.tar.gz |
|---|---|
| Size | 5.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4bc1df6b9cdd27bae0bff75cf1693f455ba32e4fa87ca9a932f60696607fe712
|
|
BLAKE2b-256 checksum How to use checksums |
60296f60a6c7fe534758baf2cde8bedb0524e5f9b473ad747d688ed898b30328
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/44.1.1 requests-toolbelt/0.9.1 tqdm/4.24.0 CPython/2.7.12
|
Release files / lhsmdu-1.1-py2.py3-none-any.whl
| Download URL | lhsmdu-1.1-py2.py3-none-any.whl |
|---|---|
| Size | 5.6 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
863f85e215247181cfe36a002e13cbcce3484e56459c019ad31ad4c2a9d3443b
|
|
BLAKE2b-256 checksum How to use checksums |
a25cc0f4e69093a4ebfc52c34cb1926dbe5f29181fcb934a624c4123d6ce1921
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.15.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/44.1.1 requests-toolbelt/0.9.1 tqdm/4.24.0 CPython/2.7.12
|
Security for lhsmdu 1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.