def _random_shoot_bspline_(fun): """Get random number from bspline-like distribuitions >>> func = ... >>> print func.shoot() """ xmn = fun.xmin() xmx = fun.xmax() ymx = max(fun.bspline().pars()) i = 0 while True: x = _uniform_(xmn, xmx) y = _uniform_(0, ymx) v = fun(x) if v >= y: return x
def _random_generate_bspline_(fun, num): """Generate random numbers from bspline-like distribuitions >>> func = ... >>> for x in func.generate( 1000 ) : print x """ xmn = fun.xmin() xmx = fun.xmax() ymx = max(fun.bspline().pars()) i = 0 while i < num: x = _uniform_(xmn, xmx) y = _uniform_(0, ymx) v = fun(x) if v >= y: i += 1 yield x
def _random_shoot_bernstein2D_(fun): """Get random number from 2D bernstein-like distribuitions >>> func = ... >>> print func.shoot() """ xmn = fun.xmin() xmx = fun.xmax() ymn = fun.ymin() ymx = fun.ymax() vmx = max(fun.bernstein().pars()) while True: x = _uniform_(xmn, xmx) y = _uniform_(ymn, ymx) if fun(x, y) >= _uniform_(0, vmx): return x, y
def _random_generate_bernstein2D_(fun, num=1): """Generate random numbers from 2D bernstein-like distribuitions >>> func = ... >>> for x,y in func.generate( 1000 ) : print x,y """ xmn = fun.xmin() xmx = fun.xmax() ymn = fun.ymin() ymx = fun.ymax() vmx = max(fun.bernstein().pars()) i = 0 while i < num: x = _uniform_(xmn, xmx) y = _uniform_(ymn, ymx) if fun(x, y) >= _uniform_(0, vmx): i += 1 yield x, y
def generate ( fun , num ) : """Generate random numbers from bernstein-like distribuitions >>> func = ... >>> for x in func.generate( 1000 ) : print x """ b = fun.bernstein() xmn = b.xmin () xmx = b.xmax () ymx = max ( b.pars() ) i = 0 from random import uniform as _uniform_ while i < num : x = _uniform_ ( xmn , xmx ) y = _uniform_ ( 0 , ymx ) v = fun ( x ) if v >= y : i+= 1 yield x
def generate2( fun , num ) : """Generate random numbers from bernstein-like distribuitions >>> func = ... >>> for x,y in func.generate( 1000 ) : print x,y """ b = fun.bernstein() xmn = b.xmin () xmx = b.xmax () ymn = b.ymin () ymx = b.ymax () vmx = max ( b.pars() ) i = 0 from random import uniform as _uniform_ while i < num : x = _uniform_ ( xmn , xmx ) y = _uniform_ ( ymn , ymx ) v = _uniform_ ( 0 , vmx ) f = fun ( x , y ) if f >= v : i+= 1 yield x,y