Download code/helpers/angle_sampler.py from JerMa88/rtm-latent-refinement-cifar10-unknownparams: direct link, hf CLI and curl.
- Browser
- Download file 1.31 kB
-
https://huggingface.co/JerMa88/rtm-latent-refinement-cifar10-unknownparams/resolve/main/code/helpers/angle_sampler.py
- Command line
-
hf download hf://JerMa88/rtm-latent-refinement-cifar10-unknownparams/code/helpers/angle_sampler.py
-
curl -L -o angle_sampler.py https://huggingface.co/JerMa88/rtm-latent-refinement-cifar10-unknownparams/resolve/main/code/helpers/angle_sampler.py
1.31 kB
| import numpy as np | |
| from scipy import interpolate | |
| class Angle_Generator: | |
| def __init__(self, dim): | |
| self.dim = dim | |
| curve, inverse_cdf = self.sample(self.f) | |
| self.curve = curve | |
| self.inverse_cdf = inverse_cdf | |
| def f(self, x): | |
| # does not need to be normalized | |
| return np.sin(x)** (self.dim - 2) | |
| def sample(self, g): | |
| x = np.linspace(0,np.pi,10000) | |
| y = g(x) # probability density function, pdf | |
| cdf_y = np.cumsum(y) # cumulative distribution function, cdf | |
| cdf_y = cdf_y/cdf_y.max() # takes care of normalizing cdf to 1.0 | |
| inverse_cdf = interpolate.interp1d(cdf_y,x) # this is a function | |
| curve = interpolate.interp1d(x,cdf_y) | |
| self.curve = curve | |
| self.inverse_cdf = inverse_cdf | |
| return curve, inverse_cdf | |
| def return_samples(self, N=1000, angle_low = 0, angle_high = np.pi): | |
| # let's generate some samples according to the chosen pdf, f(x) | |
| u_low = self.curve(angle_low) | |
| u_high = self.curve(angle_high) | |
| uniform_samples = np.random.uniform(u_low, u_high,int(N)) | |
| required_samples = self.inverse_cdf(uniform_samples) | |
| required_samples = required_samples.astype(np.float32) | |
| return required_samples | |