Sampling

StatsBase.sampleFunction
sample([rng], a, [wv::AbstractWeights])

Select a single random element of a. Sampling probabilities are proportional to the weights given in wv, if provided.

Optionally specify a random number generator rng as the first argument (defaults to Random.default_rng()).

sample([rng], a, [wv::AbstractWeights], n::Integer; replace=true, ordered=false)

Select a random, optionally weighted sample of size n from an array a using a polyalgorithm. Sampling probabilities are proportional to the weights given in wv, if provided. replace dictates whether sampling is performed with replacement. ordered dictates whether an ordered sample (also called a sequential sample, i.e. a sample where items appear in the same order as in a) should be taken.

Optionally specify a random number generator rng as the first argument (defaults to Random.default_rng()).

sample([rng], a, [wv::AbstractWeights], dims::Dims; replace=true, ordered=false)

Select a random, optionally weighted sample from an array a specifying the dimensions dims of the output array. Sampling probabilities are proportional to the weights given in wv, if provided. replace dictates whether sampling is performed with replacement. ordered dictates whether an ordered sample (also called a sequential sample, i.e. a sample where items appear in the same order as in a) should be taken.

Optionally specify a random number generator rng as the first argument (defaults to Random.default_rng()).

sample([rng], wv::AbstractWeights)

Select a single random integer in 1:length(wv) with probabilities proportional to the weights given in wv.

Optionally specify a random number generator rng as the first argument (defaults to Random.default_rng()).

sample([rng], object, method)

Sample elements or points from geometric object with method. Optionally, specify random number generator rng.

source
sample([rng], domain, size, [weights]; replace=false, ordered=false)

Utility method that calls the sample function using WeightedSampling(size, weights; replace, ordered). If weights is not defined, this is equivalent to using UniformSampling(size; replace, ordered).

source
Meshes.DiscreteSamplingMethodType
DiscreteSamplingMethod

A method for sampling from discrete representations of geometric objects such as meshes or collections of geometries.

source
Meshes.ContinuousSamplingMethodType
ContinuousSamplingMethod

A method for sampling from continuous representations of geometric objects. In this case, geometric objects are interpreted as a set of points in the embedding space.

source

Discrete sampling

UniformSampling

Meshes.UniformSamplingType
UniformSampling(size, replace=false, ordered=false)

Sample elements uniformly from a given domain/data. Produce a sample of given size with or without replacement depending on the replace option. The option ordered can be used to return samples in the same order of the domain/data.

source
grid = CartesianGrid(20, 20)

# uniform sampling without replacement
sampler = UniformSampling(100, replace=false)
blocks  = sample(grid, sampler)

viz(blocks)

WeightedSampling

Meshes.WeightedSamplingType
WeightedSampling(size, [weights]; replace=false, ordered=false)

Sample elements from a given domain/data using weights. Produce a sample of given size with or without replacement depending on the replace option. The option ordered can be used to return samples in the same order of the original domain/data. By default weights are uniform.

source
grid = CartesianGrid(20, 20)

# upper blocks are 10x more likely
weights = [fill(1, 200); fill(10, 200)]

# weighted sampling without replacement
sampler = WeightedSampling(100, weights, replace=false)
blocks  = sample(grid, sampler)

viz(blocks)

BallSampling

Meshes.BallSamplingType
BallSampling(radius; [options])

A method for sampling isolated elements from a given domain/data according to a norm-ball of given radius.

Options

  • metric - Metric for the ball (default to Euclidean())
  • maxsize - Maximum size of the resulting sample (default to none)
source
grid = CartesianGrid(20, 20)

# sample blocks that are apart by a given radius
sampler = BallSampling(5.0)
blocks  = sample(grid, sampler)

viz(blocks)

Continuous sampling

RegularSampling

Meshes.RegularSamplingType
RegularSampling(n1, n2, ..., np)

Generate samples regularly using n1 points along the first parametric dimension, n2 points along the second parametric dimension, ..., np points along the last parametric dimension.

Examples

Sample sphere regularly with 360 longitudes and 180 latitudes:

sample(Sphere((0,0,0), 1), RegularSampling(360, 180))
source
grid = CartesianGrid(20, 20)

# sample points regularly
sampler = RegularSampling(20, 30)
points  = sample(grid, sampler) |> collect

viz(points)

HomogeneousSampling

Meshes.HomogeneousSamplingType
HomogeneousSampling(size, [weights])

Generate sample of given size from geometric object according to a homogeneous density. Optionally, provide weights to specify custom sampling weights for the elements of a domain.

source
grid = CartesianGrid(20, 20)

# sample points homogeneously
sampler = HomogeneousSampling(100)
points  = sample(grid, sampler) |> collect

viz(points)

MinDistanceSampling

Meshes.MinDistanceSamplingType
MinDistanceSampling(α, ρ=0.65, δ=100, metric=Euclidean())

Generate sample from geometric object such that all pairs of points are at least α units of distance away from each other. Optionally specify the relative radius ρ for the packing pattern, the oversampling factor δ and the metric.

This method is sometimes referred to as Poisson disk sampling or blue noise sampling in the computer graphics community.

References

source
grid = CartesianGrid(20, 20)

# sample points that are apart by a given radius
sampler = MinDistanceSampling(3.0)
points  = sample(grid, sampler) |> collect

viz(points)