Example #1
0
def brownian_targ(C,x,y,h,amp,cmin, cmax,symm):
    # Compute covariance for this bit
    if h==.5:
        isotropic_cov_funs.brownian(C,x,y,cmin=0,cmax=-1,symm=symm)
    else:
        isotropic_cov_funs.frac_brownian(C,x,y,h,cmin=0,cmax=-1,symm=symm)

    imul(C, amp*amp, cmin=cmin, cmax=cmax, symm=symm)
    # Possibly symmetrize this bit
    if symm:
        symmetrize(C, cmin=cmin, cmax=cmax)
Example #2
0
    def __call__(self,x,y,amp=1.,scale=1.,symm=None,*args,**kwargs):

        if amp<0. or scale<0.:
            raise ValueError, 'The amp and scale parameters must be positive.'

        if symm is None:
            symm = (x is y)

        # Figure out how to divide job up between threads.
        nx = x.shape[0]
        ny = y.shape[0]
        n_threads = min(get_threadpool_size(), nx*ny / 10000)

        if n_threads > 1:
            if not symm:
                bounds = np.linspace(0,ny,n_threads+1)
            else:
                bounds = np.array(np.sqrt(np.linspace(0,ny*ny,n_threads+1)),dtype=int)

        # Split off the distance arguments
        distance_arg_dict = {}
        if hasattr(self.distance_fun, 'extra_parameters'):
            for key in self.extra_distance_params.iterkeys():
                if key in kwargs.keys():
                    distance_arg_dict[key] = kwargs.pop(key)

        # Allocate the matrix
        C = np.asmatrix(np.empty((nx,ny),dtype=float,order='F'))

        def targ(C,x,y, cmin, cmax,symm, d_kwargs=distance_arg_dict, c_args=args, c_kwargs=kwargs):
            # Compute distance for this bit
            self.distance_fun(C, x, y, cmin=cmin, cmax=cmax, symm=symm, **d_kwargs)
            imul(C, 1./scale, cmin=cmin, cmax=cmax, symm=symm)
            # Compute covariance for this bit
            self.cov_fun(C, cmin=cmin, cmax=cmax,symm=symm, *c_args, **c_kwargs)
            imul(C, amp*amp, cmin=cmin, cmax=cmax, symm=symm)
            # Possibly symmetrize this bit
            # FIXME: Intermittent errors apparently originating in symmetrize!
            # if symm:
            #     symmetrize(C, cmin=cmin, cmax=cmax)

        if n_threads <= 1:
            targ(C,x,y,0,-1,symm)
        else:
            thread_args = [(C,x,y,bounds[i],bounds[i+1],symm) for i in xrange(n_threads)]
            map_noreturn(targ, thread_args)

        if symm:
            symmetrize(C)


        return C
Example #3
0
    def __call__(self, x, y, amp=1., scale=1., symm=None, *args, **kwargs):

        if amp < 0. or scale < 0.:
            raise ValueError, 'The amp and scale parameters must be positive.'

        if symm is None:
            symm = (x is y)

        # Figure out how to divide job up between threads.
        nx = x.shape[0]
        ny = y.shape[0]
        n_threads = min(get_threadpool_size(), nx * ny / 10000)

        if n_threads > 1:
            if not symm:
                bounds = np.linspace(0, ny, n_threads + 1)
            else:
                bounds = np.array(np.sqrt(
                    np.linspace(0, ny * ny, n_threads + 1)),
                                  dtype=int)

        # Split off the distance arguments
        distance_arg_dict = {}
        if hasattr(self.distance_fun, 'extra_parameters'):
            for key in self.extra_distance_params.iterkeys():
                if key in kwargs.keys():
                    distance_arg_dict[key] = kwargs.pop(key)

        # Allocate the matrix
        C = np.asmatrix(np.empty((nx, ny), dtype=float, order='F'))

        def targ(C,
                 x,
                 y,
                 cmin,
                 cmax,
                 symm,
                 d_kwargs=distance_arg_dict,
                 c_args=args,
                 c_kwargs=kwargs):
            # Compute distance for this bit
            self.distance_fun(C,
                              x,
                              y,
                              cmin=cmin,
                              cmax=cmax,
                              symm=symm,
                              **d_kwargs)
            imul(C, 1. / scale, cmin=cmin, cmax=cmax, symm=symm)
            # Compute covariance for this bit
            if self.with_x:
                self.cov_fun(C,
                             x,
                             y,
                             cmin=cmin,
                             cmax=cmax,
                             symm=symm,
                             *c_args,
                             **c_kwargs)
            else:
                self.cov_fun(C,
                             cmin=cmin,
                             cmax=cmax,
                             symm=symm,
                             *c_args,
                             **c_kwargs)
            imul(C, amp * amp, cmin=cmin, cmax=cmax, symm=symm)

        if n_threads <= 1:
            targ(C, x, y, 0, -1, symm)
        else:
            thread_args = [(C, x, y, bounds[i], bounds[i + 1], symm)
                           for i in xrange(n_threads)]
            map_noreturn(targ, thread_args)

        if symm:
            symmetrize(C)

        return C