def standard_gamma(self, shape, size=None, dtype=float): """Returns an array of samples drawn from a standard gamma distribution. .. seealso:: :func:`cupy.random.standard_gamma` for full documentation, :meth:`numpy.random.RandomState.standard_gamma` """ shape = cupy.asarray(shape) if size is None: size = shape.shape y = cupy.empty(shape=size, dtype=dtype) _kernels.standard_gamma_kernel(shape, self.rk_seed, y) self.rk_seed += numpy.prod(size) return y
def gamma(self, shape, scale=1.0, size=None, dtype=float): """Returns an array of samples drawn from a gamma distribution. .. seealso:: - :func:`cupy.random.gamma` for full documentation - :meth:`numpy.random.RandomState.gamma` """ shape, scale = cupy.asarray(shape), cupy.asarray(scale) if size is None: size = cupy.broadcast(shape, scale).shape y = cupy.empty(shape=size, dtype=dtype) _kernels.standard_gamma_kernel(shape, self._rk_seed, y) y *= scale self._update_seed(y.size) return y
def dirichlet(self, alpha, size=None, dtype=float): """Returns an array of samples drawn from the dirichlet distribution. .. seealso:: :func:`cupy.random.dirichlet` for full documentation, :meth:`numpy.random.RandomState.dirichlet` """ alpha = cupy.asarray(alpha) if size is None: size = alpha.shape else: size += alpha.shape y = cupy.empty(shape=size, dtype=dtype) _kernels.standard_gamma_kernel(alpha, self.rk_seed, y) y /= y.sum(axis=-1, keepdims=True) self.rk_seed += cupy.core.internal.prod(size) return y
def dirichlet(self, alpha, size=None, dtype=float): """Returns an array of samples drawn from the dirichlet distribution. .. seealso:: - :func:`cupy.random.dirichlet` for full documentation - :meth:`numpy.random.RandomState.dirichlet` """ alpha = cupy.asarray(alpha) if size is None: size = alpha.shape elif isinstance(size, (int, cupy.integer)): size = (size, ) + alpha.shape else: size += alpha.shape y = cupy.empty(shape=size, dtype=dtype) _kernels.standard_gamma_kernel(alpha, self._rk_seed, y) y /= y.sum(axis=-1, keepdims=True) self._update_seed(y.size) return y