Python定义了一组用于生成或操作随机数的函数。 本文介绍:
random
模块
- 用
random.seed()
再生产数字
- 使用
secrets
模块创建密码学上强的随机数
- 用
numpy.random
创建随机 nd 数组
random
模块
该模块为各种版本实现伪随机数生成器。它使用Mersenne Twister算法(https://en.wikipedia.org/wiki/Mersenne_Twister)作为其核心生成器。 之所以称其为伪随机数,是因为数字看起来是随机的,但是是可重现的。
import random
a = random.random() print(a)
a = random.uniform(1,10) print(a)
a = random.randint(1,10) print(a)
a = random.randrange(1,10) print(a)
a = random.normalvariate(0, 1) print(a)
a = random.choice(list("ABCDEFGHI")) print(a)
a = random.sample(list("ABCDEFGHI"), 3) print(a)
a = random.choices(list("ABCDEFGHI"),k=3) print(a)
a = list("ABCDEFGHI") random.shuffle(a) print(a)
|
0.10426373452067317 3.34983979352444 3 4 -1.004568769635799 E ['G', 'C', 'B'] ['E', 'D', 'E'] ['D', 'I', 'G', 'H', 'E', 'B', 'C', 'F', 'A']
|
种子生成器
使用 random.seed()
,可以使结果可重复,并且 random.seed()
之后的调用链将产生相同的数据轨迹。 随机数序列变得确定,或完全由种子值确定。
print('Seeding with 1...\n')
random.seed(1) print(random.random()) print(random.uniform(1,10)) print(random.choice(list("ABCDEFGHI")))
print('\nRe-seeding with 42...\n') random.seed(42)
print(random.random()) print(random.uniform(1,10)) print(random.choice(list("ABCDEFGHI")))
print('\nRe-seeding with 1...\n') random.seed(1)
print(random.random()) print(random.uniform(1,10)) print(random.choice(list("ABCDEFGHI")))
print('\nRe-seeding with 42...\n') random.seed(42)
print(random.random()) print(random.uniform(1,10)) print(random.choice(list("ABCDEFGHI")))
|
Seeding with 1...
0.13436424411240122 8.626903632435095 B
Re-seeding with 42...
0.6394267984578837 1.2250967970040025 E
Re-seeding with 1...
0.13436424411240122 8.626903632435095 B
Re-seeding with 42...
0.6394267984578837 1.2250967970040025 E
|
secrets
模块
secrets
模块用于生成适合于管理数据(例如密码,帐户身份验证,安全令牌和相关机密)的密码学上强的随机数。
特别是,应优先使用secrets
而不是 random
模块中默认的伪随机数生成器,后者是为建模和仿真而设计的,而不是安全或加密技术。
import secrets
a = secrets.randbelow(10) print(a)
a = secrets.randbits(5) print(a)
a = secrets.choice(list("ABCDEFGHI")) print(a)
|
NumPy的随机数
为多维数组创建随机数。NumPy伪随机数生成器与Python标准库伪随机数生成器不同。
重要的是,设置Python伪随机数生成器种子不会影响NumPy伪随机数生成器,必须单独设置和使用。
import numpy as np
np.random.seed(1)
print(np.random.rand(3))
np.random.seed(1) print(np.random.rand(3))
values = np.random.randint(0, 10, (5,3)) print(values)
values = np.random.randn(5) print(values)
arr = np.array([[1,2,3], [4,5,6], [7,8,9]]) np.random.shuffle(arr) print(arr)
|
[4.17022005e-01 7.20324493e-01 1.14374817e-04] [4.17022005e-01 7.20324493e-01 1.14374817e-04] [[5 0 0] [1 7 6] [9 2 4] [5 2 4] [2 4 7]] [-2.29230928 -1.41555249 0.8858294 0.63190187 0.04026035] [[4 5 6] [7 8 9] [1 2 3]]
|
GitHub repo: qiwihui/blog
Follow me: @qiwihui
Site: QIWIHUI