scipy.stats.qmc.scale#

scipy.stats.qmc.scale(sample, l_bounds, u_bounds, *, reverse=False)[source]#

Sample scaling from unit hypercube to different bounds.

To convert a sample from \([0, 1)\) to \([a, b), b>a\), with \(a\) the lower bounds and \(b\) the upper bounds. The following transformation is used:

\[(b - a) \cdot \text{sample} + a\]
Parameters:
samplearray_like (n, d)

Sample to scale.

l_bounds, u_boundsarray_like (d,)

Lower and upper bounds (resp. \(a\), \(b\)) of transformed data. If reverse is True, range of the original data to transform to the unit hypercube.

reversebool, optional

Reverse the transformation from different bounds to the unit hypercube. Default is False.

Returns:
samplearray_like (n, d)

Scaled sample.

Examples

Transform 3 samples in the unit hypercube to bounds:

>>> from scipy.stats import qmc
>>> l_bounds = [-2, 0]
>>> u_bounds = [6, 5]
>>> sample = [[0.5 , 0.75],
...           [0.5 , 0.5],
...           [0.75, 0.25]]
>>> sample_scaled = qmc.scale(sample, l_bounds, u_bounds)
>>> sample_scaled
array([[2.  , 3.75],
       [2.  , 2.5 ],
       [4.  , 1.25]])

And convert back to the unit hypercube:

>>> sample_ = qmc.scale(sample_scaled, l_bounds, u_bounds, reverse=True)
>>> sample_
array([[0.5 , 0.75],
       [0.5 , 0.5 ],
       [0.75, 0.25]])