<!--- Licensed to the Apache Software Foundation (ASF) under one -->
<!--- or more contributor license agreements.  See the NOTICE file -->
<!--- distributed with this work for additional information -->
<!--- regarding copyright ownership.  The ASF licenses this file -->
<!--- to you under the Apache License, Version 2.0 (the -->
<!--- "License"); you may not use this file except in compliance -->
<!--- with the License.  You may obtain a copy of the License at -->

<!---   http://www.apache.org/licenses/LICENSE-2.0 -->

<!--- Unless required by applicable law or agreed to in writing, -->
<!--- software distributed under the License is distributed on an -->
<!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -->
<!--- KIND, either express or implied.  See the License for the -->
<!--- specific language governing permissions and limitations -->
<!--- under the License. -->

# Random Distribution Generator NDArray API

```eval_rst
    .. currentmodule:: mxnet.ndarray.random
```

## Overview

This document lists the random distribution generator routines of the *n*-dimensional array package:

```eval_rst
.. autosummary::
    :nosignatures:

    mxnet.ndarray.random
```

The `Random Distribution Generator NDArray` API, defined in the `ndarray.random` package, provides
imperative random distribution generator operations on CPU/GPU.

In the rest of this document, we list routines provided by the `ndarray.random` package.

## Random Distribution Generator

```eval_rst
.. currentmodule:: mxnet.ndarray.random

.. autosummary::
    :nosignatures:

    exponential
    gamma
    generalized_negative_binomial
    multinomial
    negative_binomial
    normal
    poisson
    randint
    randn
    shuffle
    uniform
    mxnet.random.seed
```

## API Reference

<script type="text/javascript" src='../../../_static/js/auto_module_index.js'></script>

```eval_rst

.. automodule:: mxnet.ndarray.random
    :members:

.. automodule:: mxnet.random
    :members:
    :noindex:

```

<script>auto_index("api-reference");</script>
