Python example: mrpt_random_example.py

Uniform, Gaussian and multivariate random samples with mrpt.random.

Modules: mrpt.random

 1#!/usr/bin/env python3
 2"""
 3Uniform, Gaussian and multivariate random samples with mrpt.random.
 4
 5Demonstrates:
 6  - CRandomGenerator: seeded deterministic generator
 7  - drawUniform / drawGaussian1D scalar draws
 8  - drawUniformArray / drawGaussianArray numpy output
 9  - Global getRandomGenerator() singleton
10"""
11
12import numpy as np
13from mrpt.random import CRandomGenerator, getRandomGenerator, Randomize
14
15# ---------------------------------------------------------------------------
16# Seeded generator (deterministic)
17# ---------------------------------------------------------------------------
18rng = CRandomGenerator(42)
19
20u = rng.drawUniform(0.0, 10.0)
21g = rng.drawGaussian1D(5.0, 2.0)
22print(f"Seeded drawUniform(0,10)     = {u:.4f}")
23print(f"Seeded drawGaussian1D(5,2)   = {g:.4f}")
24
25# Same seed → same result
26rng2 = CRandomGenerator(42)
27assert abs(rng2.drawUniform(0.0, 10.0) - u) < 1e-12, "Seeded RNG must be deterministic"
28print("  determinism check ✓")
29
30# ---------------------------------------------------------------------------
31# Numpy array output
32# ---------------------------------------------------------------------------
33samples_u = rng.drawUniformArray(10000, 0.0, 1.0)
34samples_g = rng.drawGaussianArray(10000, 0.0, 1.0)
35
36print(f"\ndrawUniformArray(10000, 0, 1): mean={samples_u.mean():.4f}, std={samples_u.std():.4f}")
37print(f"drawGaussianArray(10000, 0, 1): mean={samples_g.mean():.4f}, std={samples_g.std():.4f}")
38
39assert abs(samples_u.mean() - 0.5) < 0.02,  "Uniform mean should be ~0.5"
40assert abs(samples_g.mean() - 0.0) < 0.05,  "Gaussian mean should be ~0"
41assert abs(samples_g.std()  - 1.0) < 0.05,  "Gaussian std should be ~1"
42print("  statistics check ✓")
43
44# ---------------------------------------------------------------------------
45# Integer / 64-bit draws
46# ---------------------------------------------------------------------------
47u32 = rng.drawUniform32bit()
48u64 = rng.drawUniform64bit()
49print(f"\ndrawUniform32bit = {u32}")
50print(f"drawUniform64bit = {u64}")
51
52# ---------------------------------------------------------------------------
53# Global singleton
54# ---------------------------------------------------------------------------
55global_rng = getRandomGenerator()
56Randomize(123)
57val = global_rng.drawUniform(0.0, 1.0)
58print(f"\nGlobal RNG (seed 123): drawUniform = {val:.4f}")
59
60# ---------------------------------------------------------------------------
61# Multivariate Gaussian samples
62# ---------------------------------------------------------------------------
63cov = np.array([[1.0, 0.8], [0.8, 2.0]])
64samples = CRandomGenerator(7).drawGaussianMultivariateMany(5000, cov, mean=[10.0, 20.0])
65print(f"\n5000 samples of N([10, 20], cov): sample mean={samples.mean(axis=0)}")
66print(f"  sample covariance:\n{np.cov(samples.T)}")