📜  Julia 中的随机数生态系统——伪端(1)

📅  最后修改于: 2023-12-03 15:17:06.434000             🧑  作者: Mango

Julia 中的随机数生态系统——伪端

Julia 作为一种高性能科学计算语言,自带了强大的伪随机数生成器(PRNG)生态系统,提供了多种 PRNG 算法、分布和生成新的 PRNG 策略的接口。在本文中,我们将更深入地了解 Julia 的 PRNG 生态系统,介绍一些常见的 PRNG 算法和分布,并通过示例演示如何使用 Julia 的 PRNG 算法和分布。

PRNG 算法

Julia 的 PRNG 算法包括 MersenneTwister、Philox、Random123 和 Xoshiro 等。这些算法都是高质量、高性能、具有周期性的伪随机数生成器。下面是一些常见的 PRNG 算法和它们的参数说明:

  • MersenneTwister: 最常用的伪随机数生成器,周期几乎达到 $2^{19937}-1$,也可以使用不同的种子来生成不同的序列。示例:
# 生成一个 MersenneTwister 伪随机数生成器
rng = MersenneTwister(1234)

# 生成一组随机数
rand(rng, 3)
# [0.5908445969192337, 0.7663488412201954, 0.5662372316255087]
  • Philox: 一种基于 Feistel 网络的伪随机数生成器,可以比 MersenneTwister 稍微快一些。示例:
# 生成一个 Philox 伪随机数生成器
rng = Philox(1234, 5678)

# 生成一组随机数
rand(rng, 3)
# [0.9039631181265538, 0.27323056967097276, 0.517953026883112]
  • Random123: 一种用于科学计算的伪随机数生成器,周期和质量都非常好,通常比 MersenneTwister 和 Philox 更快。示例:
# 生成一个 Random123 伪随机数生成器
rng = Random123.PCG32(1234, 5678)

# 生成一组随机数
rand(rng, 3)
# [0.14652930555753327, 0.5974734257424063, 0.972515545820535]
  • Xoshiro: 一种简单、快速和好的伪随机数生成器,具有非常大的周期和非常出色的统计性质。示例:
# 生成一个 Xoshiro 伪随机数生成器
rng = Xoshiro.XS64(1234)

# 生成一组随机数
rand(rng, 3)
# [0.8730546051564776, 0.2699655777391663, 0.30755147256862557]
分布

Julia 的分布函数使用了一些简单的统计学定义,可以生成满足特定分布的随机变量数组。下面是一些常见的分布和它们的参数说明:

  • Uniform: 均匀分布,支持所有区间的均匀分布。示例:
# 生成一组,范围在 [0, 1) 的均匀分布随机数
rand(Uniform(0, 1), 3)
# [0.46610693954849284, 0.22561854894948637, 0.348252959454363]
  • Normal: 正态分布,支持正态分布的均值和标准差。示例:
# 生成一组均值为 0,标准差为 1 的正态分布随机数
rand(Normal(0, 1), 3)
# [-0.2855811726158777, 1.4281847663546791, -1.484294305839434]
  • Exponential: 指数分布,支持指数分布的比率。示例:
# 生成一组比率为 1 的指数分布随机数
rand(Exponential(1), 3)
# [1.0519666903817834, 1.29849765561496, 0.07373950322074162]
  • Poisson: 泊松分布,支持泊松分布的均值。示例:
# 生成一个均值为 1 的泊松分布随机数
rand(Poisson(1))
# 2
  • Binomial: 二项式分布,支持二项式分布的 n 和 p 参数。示例:
# 生成一组 n=10, p=0.5 的二项式分布随机数
rand(Binomial(10, 0.5), 3)
# [6, 3, 5]
总结

在本文中,我们介绍了 Julia 的 PRNG 生态系统和常见的 PRNG 算法和分布。我们还通过示例演示了如何使用 Julia 的 PRNG 算法和分布生成随机数。Julia 的 PRNG 生态系统非常强大、灵活和易于使用,能满足各种不同的科学计算需求。