maxframe.tensor.random.weibull#

maxframe.tensor.random.weibull(a, size=None, chunk_size=None, gpu=None, dtype=None)[源代码]#

从威布尔分布中抽取样本。

从给定形状参数 a 的单参数威布尔分布中抽取样本。

\[X = (-ln(U))^{1/a}\]

其中,U 是从 (0,1] 上的均匀分布中抽取的。

更常见的两参数威布尔分布包含尺度参数 \(\lambda\),其表达式为 \(X = \lambda(-ln(U))^{1/a}\)

参数:
  • a (float or array_like of floats) -- 分布的形状参数。应大于零。

  • size (int or tuple of ints, optional) -- 输出形状。如果给定的形状是,例如 (m, n, k),则抽取 m * n * k 个样本。如果 size 是 None``(默认值),当 ``a 是标量时返回单个值。否则,抽取 mt.array(a).size 个样本。

  • chunk_size (int or tuple of int or tuple of ints, optional) -- 每个维度上期望的块大小

  • gpu (bool, optional) -- 如果为 True,则在 GPU 上分配张量,默认为 False

  • dtype (data-type, optional) -- 返回张量的数据类型。

返回:

out -- 从参数化的威布尔分布中抽取的样本。

返回类型:

Tensor or scalar

备注

威布尔分布(或最小值的第三类渐近极值分布,SEV Type III,或 Rosin-Rammler 分布)是广义极值 (GEV) 分布中用于建模极值问题的一类分布。此类分布包括 Gumbel 分布和 Frechet 分布。

威布尔分布的概率密度为

\[p(x) = \frac{a} {\lambda}(\frac{x}{\lambda})^{a-1}e^{-(x/\lambda)^a},\]

其中 \(a\) 是形状参数,\(\lambda\) 是尺度参数。

该函数在其峰值(众数)处为 \(\lambda(\frac{a-1}{a})^{1/a}\)

a = 1 时,威布尔分布退化为指数分布。

引用

示例

从分布中抽取样本:

>>> import maxframe.tensor as mt
>>> a = 5. # shape
>>> s = mt.random.weibull(a, 1000)

显示样本的直方图以及概率密度函数:

>>> import matplotlib.pyplot as plt
>>> x = mt.arange(1,100.)/50.
>>> def weib(x,n,a):
...     return (a / n) * (x / n)**(a - 1) * mt.exp(-(x / n)**a)
>>> count, bins, ignored = plt.hist(mt.random.weibull(5.,1000).execute())
>>> x = mt.arange(1,100.)/50.
>>> scale = count.max()/weib(x, 1., 5.).max()
>>> plt.plot(x.execute(), (weib(x, 1., 5.)*scale).execute())
>>> plt.show()