Skip to content

Sample Distribution

Particula-beta Index / Particula Beta / Data / Process / Sample Distribution

Auto-generated documentation for particula_beta.data.process.sample_distribution module.

get_samples_from_tabulated_pdf

Show source in sample_distribution.py:10

Draw random samples from a 1-D PDF that is supplied as tabulated values.

The function assumes x is strictly increasing and pdf ≥ 0 for all points. If pdf is not already normalised, it is normalised internally.

Arguments

  • x - 1-D array of the abscissa values (e.g. particle radii in metres).
  • pdf - 1-D array of the unnormalised probability-density values evaluated at each x. Must be the same length as x.
  • n_samples - Number of random variates to return.
  • rng - Optional np.random.Generator for reproducibility.

Returns

1-D NumPy array of length n_samples containing samples drawn from the distribution represented by (x, pdf).

Examples

# Mixture of two lognormals, tabulated on a log-spaced grid
import numpy as np
from scipy.stats import lognorm

x_grid = np.geomspace(1e-9, 5e-7, 10000)
modes   = np.array([5e-8, 1e-7])
gsds    = np.array([1.5,  2.0])
weights = np.array([1e9, 5e9])

pdf_vals = sum(
    w * lognorm(s=np.log(gsd), scale=mode).pdf(x_grid)
    for w, gsd, mode in zip(weights, gsds, modes)
)

radii = sample_from_tabulated_pdf(x_grid, pdf_vals, 10_000)

Signature

def get_samples_from_tabulated_pdf(
    distribution_bins: NDArray[np.float64],
    distribution_pdf: NDArray[np.float64],
    number_of_samples: int,
    random_generator: np.random.Generator | None = None,
) -> np.ndarray: ...