【问题标题】:Access method for distribution-sampled random numbers generation in NumpyNumpy中分布抽样随机数生成的访问方法
【发布时间】:2022-02-03 09:14:09
【问题描述】:

我很想知道 Numpy 在numpy.random 中使用哪种方法来生成分布为 beta、对数正态、Weibull 分布等的随机数。 In the documentation他们经常讨论分布的形状,但是我怎样才能获得方法呢?例如,在numpy.random.chisquare() the method is expained 中,而不是在其他人中。

【问题讨论】:

标签: python numpy random probability-distribution


【解决方案1】:

伪随机数以在整个数字表示空间上均匀分布的整数开始它们的生命,然后使用https://en.wikipedia.org/wiki/Inverse_transform_sampling 转换为所需的形状和范围。虽然描述 usually 假设实数在 [0,1] 上的均匀分布,但很容易想象从 [0,2^{64 范围内的一个得到 [0,1] 上的均匀分布的转换}]。在numpy,是这样完成的:

def uniform_from_uint64(x):
    return (x >> np.uint64(11)) * (1.0 / 9007199254740992.0)


def uniform_from_uint32(x):
    out = np.empty(len(x) // 2)
    for i in range(0, len(x), 2):
        a = x[i] >> 5
        b = x[i + 1] >> 6
        out[i // 2] = (a * 67108864.0 + b) / 9007199254740992.0
    return out

在更高维度 (as early as in 2D) 中,事情变得不平凡,尤其是在效率方面。

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2018-11-24
    • 2017-12-28
    • 1970-01-01
    相关资源
    最近更新 更多