Example of generating samples from a complex distribution by feeding to a function bivariate gaussians. The function can be implemented by a neural network.
import numpy as npimport matplotlib.pyplot as pltdef generate_half_moon(num_points, radius, width):# Generate points on a circle theta = np.linspace(0, np.pi, num_points) x_circle = radius * np.cos(theta) y_circle = radius * np.sin(theta)# The function changes the mean of the standard normal distribution x_noisy = x_circle + np.random.normal(0, width, num_points) y_noisy = y_circle + np.random.normal(0, width, num_points)# Combine x and y coordinates half_moon_points = np.column_stack((x_noisy, y_noisy))return half_moon_points# Example usage:half_moon_data = generate_half_moon(num_points=1000, radius=1.0, width=0.1)plt.scatter(half_moon_data[:, 0], half_moon_data[:, 1])plt.xlabel("X-axis")plt.ylabel("Y-axis")plt.title("Generated Half-Moon")plt.show()