Source code for cbx.utils.particle_init
import numpy as np
[docs]
def init_particles(shape=(1,1,1), x_min=-1.0, x_max = 1.0, delta=1.0, method="uniform"):
    r"""Initialize particles
    
    Parameters
    ----------
    N : int, optional
        Number of particles. The default is 100.
    d : int, optional
        Dimension of the particles. The default is 2.
    x_min : float, optional
        Lower bound for the uniform distribution. The default is 0.0.
    x_max : float, optional
        Upper bound for the uniform distribution. The default is 1.0.
    delta : float, optional
        Standard deviation for the normal distribution. The default is 1.0.
    method : str, optional
        Method for initializing the particles. The default is "uniform".
        Possible values: "uniform", "normal"
    
    Returns
    -------
    x : numpy.ndarray
        Array of particles of shape (N, d)
    """
    if method == "uniform":
        x = np.random.uniform(x_min, x_max, shape)
    elif method == "normal":
        if len(shape) == 3:
            M, N, d = shape
        elif len(shape) == 2:
            N, d = shape
            M = 1
        else:
            raise RuntimeError('Normal initialization only supported for 2D or 3D shapes!')
        
        x = np.random.multivariate_normal(np.zeros((d,)), delta * np.eye(d), (M, N))
    else:
        raise RuntimeError('Unknown method for init_particles specified!')
        
    return x