本文共 2678 字,大约阅读时间需要 8 分钟。
随机数在许多算法中都是关键步骤,例如蒙特卡洛方法、遗传算法中的轮盘赌法等。掌握不同语言中随机数生成的方法至关重要。Python 和 R 在随机数底层生成上都依靠梅森旋转(Twister)来生成高质量的随机数,但两者在语法和使用方式上存在显著差异。本文将分别介绍 Python 和 R 中常用的随机数生成方法。
Python 的 random 模块提供了丰富的随机数生成功能,适用于各种场景。以下是其常见函数的示例:
random.random_sample() 与 random.random()
random_sample() 返回多个随机数,而 random.random() 仅返回单个值。例如: from numpy import randomfor i in range(10): print(random.random_sample()) # 生成多个随机数
输出示例:
0.51311671226788710.31828442487209860.5391999374256481...
random.random_integers()
random.random_integers(1, 10, 10) # 生成10个1到10之间的整数
输出示例:
array([ 9, 10, 6, 4, 10, 10, 5, 3, 1, 6])
random.permutation()
for i in range(5): token = random.permutation(5) print(set(token))
输出示例:
{0, 1, 2, 3, 4}{0, 3, 4, 2, 1}... random.shuffle()
list = [i for i in range(10)]random.shuffle(list)print(list)
输出示例:
[6, 8, 2, 4, 5, 3, 0, 7, 1, 9]
random.seed()
random.seed(42)print(random.permutation(5))random.seed(42)print(random.permutation(5))
输出示例:
[1, 4, 2, 0, 3][1, 4, 2, 0, 3]
random.choice()
list = [i for i in range(10)]random.choice(list, 6, replace=False) # 有放回# 输出示例:# array([9, 6, 4, 2, 7, 8])random.choice(list, 6, replace=True) # 无放回# 输出示例:# array([1, 3, 9, 4, 0, 8])
random.rand()
random.rand(5) # 生成5个随机数
输出示例:
array([0.86317047, 0.43070734, 0.85228662, 0.74797087, 0.76224563])
random.randn()
random.randn(10) # 生成10个正态分布随机数
输出示例:
array([-0.25617082, -0.85531159, -0.18286371, 1.25656827, -0.72270841, 0.13949334, 0.92318096, -1.12549131, -0.46908035, -0.28388281])
random.randint()
random.randint(1, 10, 5) # 生成5个1到10之间的整数
输出示例:
array([2, 9, 8, 8, 9])
R 作为一门专为统计设计的语言,其随机数生成功能尤为丰富。以下是常用函数的示例:
rnorm()
rnorm(5, mean=0, sd=1) # 生成5个正态分布随机数
输出示例:
[1] -0.36167951 -0.50435239 -0.20245800 0.07877604 0.23662553
runif()
runif(5, min=0, max=10) # 生成5个0-10之间的均匀分布随机数
输出示例:
[1] 3.2774081 1.7341489 8.4128022 3.1511841 0.3385417
sample()
sample(1:10, 5, replace=T) # 有放回# 输出示例:# [1] 4 9 3 4 4sample(1:10, 5, replace=F) # 无放回# 输出示例:# [1] 3 2 6 8 1
set.seed()
set.seed(42)sample(1:10, 5, replace=F) # 生成5个无放回的随机整数
输出示例:
[1] 10 9 3 6 4
再次调用相同种子:
[1] 10 9 3 6 4
random.seed(),而在 R 中使用 set.seed()。不同的语言默认使用不同的随机性原则(如系统时间)。通过合理选择和使用这些随机数生成函数,可以在各类算法和分析中充分发挥其优势。
转载地址:http://qacuz.baihongyu.com/