parent
672ab6516d
commit
f6e5522561
@ -0,0 +1,34 @@
|
||||
from functools import partial
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
|
||||
def van_der_corput(n, base=2):
|
||||
"""Generate the n-th value in the Van der Corput sequence."""
|
||||
vdc, denom = 0, 1
|
||||
while n:
|
||||
denom *= base
|
||||
n, remainder = divmod(n, base)
|
||||
vdc += remainder / denom
|
||||
return vdc
|
||||
|
||||
|
||||
def van_der_corput_sampling_gen(vdc_values):
|
||||
"""Generator function for sampling indices based on weights using the Van der Corput sequence."""
|
||||
|
||||
def gen(weights, vdc_value):
|
||||
cdf = np.cumsum(weights)
|
||||
sample = np.searchsorted(cdf, vdc_value)
|
||||
return sample
|
||||
|
||||
sample_index = 0
|
||||
# Pre-generate Van der Corput sequence
|
||||
max_samples = 100000 # or any number that you find suitable
|
||||
|
||||
while True:
|
||||
# Generate the next value in the Van der Corput sequence
|
||||
vdc_value = vdc_values[sample_index % max_samples]
|
||||
# Generate a sample index based on the Van der Corput value and the CDF
|
||||
yield partial(gen, vdc_value=vdc_value)
|
||||
sample_index += 1
|
Loading…
Reference in new issue