Skip to main content

Python library for Localized Distribution (LCD)-based Gaussian sampling.

Project description

Deterministic Gaussian Sampling

Deterministic approximation and reduction of multivariate Dirac mixtures and Gaussian distributions using an optimized C++ backend with a clean Python interface.

The computational core is written in C++ for high performance.
The Python package provides a NumPy-friendly API and ships with precompiled binaries.

📖 Full API Documentation:
https://kit-isas.github.io/deterministic_gaussian_sampling_py/


Installation

pip install deterministic-gaussian-sampling

Requirements

  • Python ≥ 3.8
  • NumPy

Optional (for visualization examples):

  • SciPy
  • Matplotlib

Overview

The package provides two main classes:

DiracToDiracApproximation
GaussianToDiracApproximation

They allow you to:

  • Reduce large discrete sample sets to fewer deterministic points
  • Approximate Gaussian distributions with optimized Dirac support points
  • Compute the modified van Mises distance
  • Compute the analytic gradient of the distance

1️⃣ Dirac-to-Dirac Reduction

Reduce M discrete samples in ℝᴺ to L < M optimized deterministic samples.


Basic Example

import deterministic_gaussian_sampling
import numpy as np

# Generate example data
num_points = 3000
N = 2
L = 12

x = np.random.normal(0, 1, num_points)
y = np.random.normal(0, 1, num_points)
original_points = np.column_stack((x, y))

# Create approximation object
d2d = deterministic_gaussian_sampling.DiracToDiracApproximation()

# Allocate output array (L x N)
reduced = np.empty((L, N))

# Run reduction (multi-threaded version)
result = d2d.approximate_thread_double(
    original_points,  # input samples (M x N)
    num_points,       # M
    L,                # number of target points
    N,                # dimension
    reduced           # output buffer
)

print("Success:", result.result)
print("Reduced points:\n", reduced)

del d2d

Available Methods

approximate_double(...)          # single-threaded
approximate_thread_double(...)   # multi-threaded
approximate_function_double(...) # custom weight functions

2️⃣ Gaussian-to-Dirac Approximation

Approximate a multivariate Gaussian distribution with L deterministic Dirac points.


Standard Normal Example

import deterministic_gaussian_sampling
import numpy as np

N = 2
L = 12

g2d = deterministic_gaussian_sampling.GaussianToDiracApproximation()

approx = np.empty((L, N))

result = g2d.approximate_snd_double(
    L,
    N,
    approx
)

print("Success:", result.result)
print("Dirac points:\n", approx)

del g2d

Full Covariance Example

import numpy as np
import deterministic_gaussian_sampling

Sigma = np.array([[2.0, 0.5],
                  [0.5, 2.0]])

N = 2
L = 12

g2d = deterministic_gaussian_sampling.GaussianToDiracApproximation()

approx = np.empty((L, N))

result = g2d.approximate_double(
    Sigma,  # covariance matrix
    L,
    N,
    approx
)

print("Success:", result.result)
print("Dirac points:\n", approx)

del g2d

The covariance matrix is internally diagonalized and the optimized points are automatically transformed back into the original coordinate system.

Optimizer Options

Addiotional parameters allow you to control the optimization process. In case of the approximation of a standard Gaussian, options are passed in form of settings class:

import deterministic_gaussian_sampling
import numpy as np

N = 2
L = 12

g2d = deterministic_gaussian_sampling.GaussianToDiracApproximation()
options = deterministic_gaussian_sampling.ApproximateOptionsPy(
        ftolAbs=1e-15, # absolute function value tolerance # Default: 0 (ignored)
        ftolRel=1e-15, # relative function value tolerance # Default: 0 (ignored)
        xtolAbs=1e-15, # absolute parameter change tolerance # Default: 0 (ignored)
        xtolRel=1e-15, # relative parameter change tolerance # Default: 1e-10 
        gtol=1e-15, # gradient norm tolerance # Default: 1e-10
        maxIterations=1000, # maximum number of iterations # Default: 10000
        initialX=False, # use 'approx' as iniitial solotion for optimization  # Default: False (if True, the initial points are used as starting point for optimization, otherwise they are ignored and the optimization starts with a default initialization)
        verbose=True, # enable verbose output during optimization # Default: False
    )

approx = np.empty((L, N))
result = g2d.approximate_snd_double(L, N, approx, options=options)
result.x # contains the optimized points

Distance and Gradient

You can evaluate approximation quality directly.

Compute Distance

distance = d2d.approximate_double.modified_van_mises_distance_sq(
    y, M, L, N, x
)

Compute Analytic Gradient

gradient = d2d.approximate_double.modified_van_mises_distance_sq_derivative(
    y, M, L, N, x
)

This allows integration into:

  • Custom optimization routines
  • Gradient-based machine learning workflows
  • Differentiable programming setups

Custom Weight Functions (Advanced)

You can define position-dependent weights:

def wX(x):
    return np.exp(-np.sum(x**2))

def wXD(x):
    return -2 * x * np.exp(-np.sum(x**2))

Use them with:

d2d.approximate_function_double(
    y, M, L, N, x,
    wX=wX,
    wXD=wXD
)

Notes

  • All heavy computations run in optimized C++
  • Python layer is lightweight and NumPy-based
  • Precompiled binaries are included in the package
  • Works on Linux and Windows

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

deterministic_gaussian_sampling-0.0.2.tar.gz (2.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file deterministic_gaussian_sampling-0.0.2.tar.gz.

File metadata

File hashes

Hashes for deterministic_gaussian_sampling-0.0.2.tar.gz
Algorithm Hash digest
SHA256 040b2c4ac0d811bd0a87db31c01abef74b0b7cf526eae4b20c51bb2d6933e12a
MD5 3e5eb6ca1fd16b8450bb7c6cafef649e
BLAKE2b-256 472658d4ebd4acfb7155f4c489367975063fc0d66688e5ff33252e373a5c168f

See more details on using hashes here.

Provenance

The following attestation bundles were made for deterministic_gaussian_sampling-0.0.2.tar.gz:

Publisher: build-package.yml on KIT-ISAS/deterministic_gaussian_sampling_py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file deterministic_gaussian_sampling-0.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for deterministic_gaussian_sampling-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7346c18d1ccb7a07c1221ce6d2354548d7cfedcd34c01cc255eebab60c1ccb56
MD5 408d6c7a69fe6bc71c619d816c2fc3cf
BLAKE2b-256 9e3758e6f5057f3f579b726fde218d5f56a5318c7e5826f6a98f16340354fbed

See more details on using hashes here.

Provenance

The following attestation bundles were made for deterministic_gaussian_sampling-0.0.2-py3-none-any.whl:

Publisher: build-package.yml on KIT-ISAS/deterministic_gaussian_sampling_py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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