Skip to main content

This is an implementation of Latin Hypercube Sampling with Multi-Dimensional Uniformity (LHS-MDU) from Deutsch and Deutsch, "Latin hypercube sampling with multidimensional uniformity.

Project description

LHS-MDU
--------

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
>>> 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], col="g", label="LHS-MDU")
>>> plt.scatter(l[0], l[1], col="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::

>>> 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
>>> 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()

===========================================================================================

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(lhsmdu.inverseTransformSample(p, k[0]))
>>> plt.show()




Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lhsmdu-0.1.tar.gz (4.2 kB view hashes)

Uploaded Source

Built Distributions

lhsmdu-0.1-py3-none-any.whl (5.0 kB view hashes)

Uploaded Python 3

lhsmdu-0.1-py2.7.egg (6.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page