Page MenuHomec4science

low_discrepancy.py
No OneTemporary

File Metadata

Created
Sat, Sep 21, 18:03

low_discrepancy.py

# Copyright (C) 2018 by the RROMPy authors
#
# This file is part of RROMPy.
#
# RROMPy is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# RROMPy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with RROMPy. If not, see <http://www.gnu.org/licenses/>.
#
import numpy as np
from rrompy.utilities.base.types import Np1D
from rrompy.utilities.exception_manager import RROMPyException
__all__ = ['vanderCorput', 'lowDiscrepancy']
def vanderCorput(n:int) -> Np1D:
if n <= 0:
raise RROMPyException("Only positive integers allowed.")
x = [0] * n
ln = int(np.ceil(np.log2(n)))
for j in range(n):
x[j] = int(np.binary_repr(j, width = ln)[::-1], 2)
return x
def lowDiscrepancy(n:int) -> Np1D:
if n <= 0:
raise RROMPyException("Only positive integers allowed.")
x = [0] * n
max2Pow = np.binary_repr(n)[::-1].find('1')
max2Fac = 2 ** max2Pow
res2 = n // max2Fac
xBase = res2 * np.array(vanderCorput(max2Fac), dtype = np.int)
stride = ((n - 1) // 2 - 1) * (max2Pow == 0) + 1
print(res2, max2Fac)
for i in range(res2):
x[i * max2Fac : (i + 1) * max2Fac] = (i * stride + xBase) % n
return x

Event Timeline