Source code for nubo.utils.generate_inputs
import torch
from torch import Tensor
from typing import Optional
from .latin_hypercube import LatinHypercubeSampling
from .transform import unnormalise
[docs]
def gen_inputs(num_points: int,
num_dims: int,
bounds: Optional[Tensor]=None,
num_lhd: Optional[int]=1000) -> Tensor:
"""
Generate data inputs from a maximin Latin hypercube design or from a
uniform distribution for one data point.
Parameters
----------
num_points : ``int``
Number of points.
num_dims : ``int``
Number of input dimensions.
bounds : ``torch.Tensor``, optional
(size 2 x `num_dims`) Bounds of input space, default is none. If none,
bounds are a [0, 1]^`num_dims`.
num_lhd : ``int``, optional
Number of Latin hypercube designs to consider, default is 1000.
Returns
-------
``torch.Tensor``
(size `num_points` x `num_dims`) Input data.
"""
if bounds == None:
bounds = torch.Tensor([[0.]*num_dims, [1.]*num_dims])
if num_points == 1:
points = torch.rand((1, num_dims))
else:
lhs = LatinHypercubeSampling(dims=num_dims)
points = lhs.maximin(points=num_points, samples=num_lhd)
points = unnormalise(points, bounds=bounds)
return points