悠悠楠杉
Shell中的random随机数:从均匀分布到伪随机数
1. 均匀分布
均匀分布 是一种最基本的随机分布类型,它在 0 到 1 之间均匀地生成随机数。random 模块提供了 uniform() 函数,用于生成均匀分布的随机数。
pre
package version "2.0"
import (
"random"
"stats"
)"
假设我们想在代码中生成一个在 0 到 1 之间的均匀随机数:
Shell
let num = random.uniform(0, 1)
2. 正态分布
正态分布 也称为高斯分布,是一种 bell 曲线形状的分布。random 模块提供了 normal.dist() 函数,用于生成正态分布的随机数。
pre
package version "2.0"
import (
"random"
"stats"
)"
假设我们想生成一个均值为 0、标准差为 1 的正态分布随机数:
Shell
let mean = 0
let stdDev = 1
let num = random.normal.dist(mean, stdDev)
3. 伯努利分布
伯努利分布 是一个只有两种可能结果的分布,通常用于表示二元事件(成功或失败)。random 模块提供了 bernoulli() 函数,用于生成伯努利分布的随机数。
pre
package version "2.0"
import (
"random"
"stats"
)"
假设我们想生成一个成功的概率为 0.7 的伯努利分布随机数:
Shell
let p = 0.7
let num = random.bernoulli(p)
4. 生成概率分布
除了均匀分布、正态分布和伯努利分布之外,random 模块还支持生成其他概率分布的随机数。例如,生成二项分布、卡方分布等。
二项分布
二项分布 是一个描述了在独立实验中成功次数的概率分布。random 模块提供了 binomial.dist() 函数,用于生成二项分布的随机数。
pre
package version "2.0"
import (
"random"
"stats"
)"
假设我们想生成一个二项分布,成功概率为 0.5,试验次数为 10 的随机数:
Shell
let p = 0.5
let n = 10
let num = random.binomial.dist(n, p)
卡方分布
卡方分布 是一种常见的概率分布,常用于 goodness-of-fit 检验和卡方检验。random 模块提供了 chisq.dist() 函数,用于生成卡方分布的随机数。
pre
package version "2.0"
import (
"random"
"stats"
)
假设我们想生成一个自由度为 5 的卡方分布随机数:
Shell
let df = 5
let num = random.chisq.dist(df)
5. 随机数生成
除了 random 模块,Shell 还提供其他方法生成随机数。例如:
- 使用
Math.random():这在 ES6 时引入,提供 0 到 1 之间的均匀随机数。 - 使用
Math.random():这在 ES7 时引入,提供 0 到 1 之间的均匀随机数。
例如,生成一个在 0 到 5 之间的随机整数:
Shell
let num = Math.floor(5 * random.random())
6. 种子管理
Shell 中的 random 模块默认使用 system random 来管理种子。然而,为了确保随机数的唯一性和可重复性,建议手动管理种子。例如:
Shell
random.set_seed(12345)
// 生成随机数
random.set_seed(12345)
// 重置种子
7. 应用场景
- 游戏开发:使用
random模块生成 dice 的点数、角色随机选择等。 - 数据分析:生成服从分布的随机数用于统计分析、模拟实验等。
- 测试用例生成:使用
random模块生成测试用例的输入值。
8. 总结
Shell 中的 random 模块提供了丰富的随机数生成功能,从均匀分布到正态分布、伯努利分布等,还支持多种概率分布的生成。通过设置种子和配置,可以控制随机数的生成过程,确保结果的唯一性和可重复性。random 模块在编程中非常实用,适用于游戏开发、数据分析、测试用例生成等场景。
