RNG

class RNG(seed=None, device=None)[源代码]

RNG 公开了一些生成随机数的方法。

参数
  • seed (Optional[int]) – 用于初始化伪随机数生成器的随机种子。默认值:None

  • device (Optional[str]) – 生成向量的设备。默认值:None

实际案例

import megengine.random as rand
rng = rand.RNG(seed=100)
x = rng.uniform(size=(2, 2))
print(x.numpy())

输出:

[[0.84811664 0.6147553 ]
 [0.59429836 0.64727545]]
beta(alpha, beta, size=None)[源代码]

服从贝塔分布 \(\operatorname{Beta}(\alpha, \beta)\) 的随机变量。

对应的概率密度函数为

\[p(x)=\frac{1}{\mathrm{~B}(\alpha, \beta)} x^{\alpha-1}(1-x)^{\beta-1} \quad \text { for } \alpha, \beta>0,\]

其中 \(\mathrm{~B}(\alpha, \beta)\) 是 Beta 函数,

\[\mathrm{~B}(\alpha, \beta)=\int_{0}^{1} t^{\alpha-1}(1-t)^{\beta-1} d t 。\]
参数
  • alpha (Union[Tensor, float]) – 分布的 alpha 参数。必须是非负数。

  • beta (Union[Tensor, float]) – 分布的 beta 参数。必须是非负数。

  • size (Optional[Iterable[int]]) – 输出向量的大小。如果 alpha 和 beta 是标量,例如给定大小为 (m, n),则输出形状为 (m, n)。如果 alpha 或 beta 是一个向量,例如给定的大小是 (m, n) ,那么输出形状是 (m, n) + broadcast(alpha, beta).shape.

返回

输出张量

实际案例

import megengine as mge
import megengine.random as rand

x = rand.beta(alpha=2, beta=1, size=(2, 2))
print(x.numpy())

alpha = mge.Tensor([[0.5],
                    [  3]], dtype="float32")
beta = mge.Tensor([0.5,5], dtype="float32")

x = rand.beta(alpha=alpha, beta=beta)
print(x.numpy())

x = rand.beta(alpha=alpha, beta=beta, size=2)
print(x.numpy())

输出:

[[0.582565   0.91763186]
 [0.86963767 0.6088103 ]]

[[0.41503012 0.16438372]
 [0.90159506 0.47588003]]

[[[0.55195075 0.01111084]
  [0.95298755 0.25048104]]
 [[0.11680304 0.13859665]
  [0.997879   0.43259275]]]
gamma(shape, scale=1, size=None)[源代码]

服从伽玛分布 \(\Gamma(k, \theta)\) 的随机变量。

对应的概率密度函数为

\[p(x)=x^{k-1} \frac{e^{-x / \theta}}{\theta^{k} \Gamma(k)} \quad \text { for } x>0 \quad k, \theta>0,\]

其中 \(\Gamma(k)\) 是 gamma 函数,

\[\Gamma(k)=(k-1) ! \quad \text { for } \quad k>0。\]
参数
  • shape (Union[Tensor, float]) – 分布的形状参数(有时称为“k”)。必须是非负数。

  • scale (Union[Tensor, float]) – 分布的尺度参数(有时称为“theta”)。必须是非负数。默认值:1

  • size (Optional[Iterable[int]]) – 输出向量的大小。如果 shape 和 scale 是标量,例如给定大小为 (m, n),则输出形状为 (m, n)。如果 shape 和 scale 是一个向量,例如给定的大小是`(m, n)` ,那么输出形状是 (m, n) + broadcast(shape, scale).shape. 广播规则与 numpy.broadcast 一致。默认值:None

返回

输出张量

实际案例

import megengine as mge
import megengine.random as rand

x = rand.gamma(shape=2, scale=1, size=(2, 2))
print(x.numpy())

shape = mge.Tensor([[ 1],
                    [10]], dtype="float32")
scale = mge.Tensor([1,5], dtype="float32")

x = rand.gamma(shape=shape, scale=scale)
print(x.numpy())

x = rand.gamma(shape=shape, scale=scale, size=2)
print(x.numpy())

输出:

[[1.5064533  4.0689363 ]
 [0.71639484 1.4551026 ]]

[[ 0.4352188 11.399335 ]
 [ 9.1888    52.009277 ]]

[[[ 1.1726005   3.9654975 ]
  [13.656933   36.559006  ]]
 [[ 0.25848487  2.5540342 ]
  [11.960409   21.031536  ]]]
normal(mean=0, std=1, size=None)[源代码]

服从高斯分布的随机变量 \(N(\mu, \sigma)\)

参数
  • mean (float) – 分布的均值或期望。默认值:0

  • std (float) – 分布的标准差(方差= \(\sigma ^ 2\) )。默认值:1

  • size (Optional[Iterable[int]]) – 输出向量的大小。默认值:None

返回

输出张量

实际案例

import megengine as mge
import megengine.random as rand

x = rand.normal(mean=0, std=1, size=(2, 2))
print(x.numpy())

输出:

[[-1.4010863  -0.9874344 ]
 [ 0.56373274  0.79656655]]
permutation(n, *, dtype='int32')[源代码]
打乱一个张量,或者返回给定范围的随机张量

如果 n 是一个张量,只会沿着第一个轴打乱

参数
  • n (Union[int, Tensor]) – 如果 n 是一个整数,会返回 0 到 n-1 的一个随机张量。如果 n 是一个张量会返回一个新的打乱后的张量

  • dtype (str) – 当 n 为整数时返回张量设置的类型。支持 int32,int16 和 float32,默认为 int32

返回

输出张量

实际案例

import numpy as np
import megengine as mge
import megengine.random as rand

x = rand.permutation(10, dtype="int32")
print(x.numpy())

x = rand.permutation(10, dtype="float32")
print(x.numpy())

x = mge.tensor(np.arange(18)).reshape(6,3)
x = rand.permutation(x)
print(x.numpy())

输出:

[4 5 0 7 3 8 6 1 9 2]
[3. 4. 9. 0. 6. 8. 7. 1. 5. 2.]
[[12 13 14]
 [ 3  4  5]
 [15 16 17]
 [ 0  1  2]
 [ 9 10 11]
 [ 6  7  8]]
poisson(lam, size=None)[源代码]

服从泊松分布 \(\operatorname{Poisson}(\lambda)\) 的随机变量。

对应的概率密度函数为

\[f(k ; \lambda)=\frac{\lambda^{k} e^{-\lambda}}{k !},\]

其中 k 是出现的次数 \(({\displaystyle k=0,1,2...})\)

参数
  • lam (Union[float, Tensor]) – 分布的 lamda 参数。必须是非负数。

  • size (Optional[Iterable[int]]) – 输出向量的大小。如果 lam 是标量,例如给定大小为 (m, n),则输出形状为 (m, n)。如果 lam 是一个向量,例如给定的大小是 (m, n) ,那么输出形状是 (m, n, k, v). 默认值:None

返回

输出张量

实际案例

import megengine as mge
import megengine.random as rand

x = rand.poisson(lam=2., size=(1, 3))
print(x.numpy())

lam = mge.Tensor([[1.,1.],
                [10,10]], dtype="float32")

x = rand.poisson(lam=lam)
print(x.numpy())

x = rand.poisson(lam=lam, size=(1,3))
print(x.numpy())

输出:

[[3. 1. 3.]]

[[ 2.  2.]
 [12. 11.]]

[[[[ 1.  1.]
   [11.  4.]]
  [[ 0.  0.]
   [ 9. 13.]]
  [[ 0.  1.]
   [ 7. 12.]]]]
shuffle(inp)[源代码]

打乱张量的内容原地修改张量。这个函数只是沿着第一个轴打乱张量。张量顺序改变但不改变值

参数

inp (Tensor) – 输入张量。

实际案例

import numpy as np
import megengine as mge
import megengine.random as rand

x = mge.tensor(np.arange(10))
rand.shuffle(x)
print(x.numpy())
y = mge.tensor(np.arange(18)).reshape(6,3)
rand.shuffle(y)
print(y.numpy())

输出:

[7 9 3 0 8 2 4 5 6 1]
[[12. 13. 14.]
 [ 3.  4.  5.]
 [15. 16. 17.]
 [ 0.  1.  2.]
 [ 9. 10. 11.]
 [ 6.  7.  8.]]
uniform(low=0, high=1, size=None)[源代码]

服从均匀分布 $U(0, 1)$ 的随机变量

参数
  • low (float) – 下界。默认值:0

  • high (float) – 上界。默认值:1

  • size (Optional[Iterable[int]]) – 输出向量的大小。默认值:None

返回

输出张量

实际案例

import megengine as mge
import megengine.random as rand

x = rand.uniform(size=(2, 2))
print(x.numpy())

输出:

[[0.91600335 0.6680226 ]
 [0.2046729  0.2769141 ]]