伪随机数生成器
伪随机数是用确定性的算法计算出来的似来自[0,1]均匀分布的随机数序列。并不是真正的随机,但具有类似于随机数的统计特征,如均匀性,独立性。
import numpy as np
rng = np.random.RandomState(2)
ret = rng.rand(5)
print(ret)
rng = np.random.RandomState(2)
ret = rng.rand(5)
print(ret)
output
[0.4359949 0.02592623 0.54966248 0.43532239 0.4203678 ]
[0.4359949 0.02592623 0.54966248 0.43532239 0.4203678 ]
上面跟 numpy.random.seed() 很一样
因为是伪随机数,所以必须在rng这个变量下使用。后面的测试好像不是必须用rng这个变量。
用random.rand(), 得不到同样的值
import numpy as np
np.random.RandomState(0)
ret = np.random.rand(4)
print(ret)
np.random.RandomState(0)
ret = np.random.rand(4)
print(ret)
[0.67546704 0.80175216 0.04968078 0.25889815]
[0.82251509 0.95114405 0.69503198 0.77726581]
import numpy as np
def rng1():
for i in range(4):
rng = np.random.RandomState(0)
print("i = %s" % i)
print(rng.rand(3,2))
rng1()
output
i = 0
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
i = 1
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
i = 2
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
i = 3
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
import numpy as np
def rng2():
rng = np.random.RandomState(0)
for i in range(4):
print("i = %s" % i)
print(rng.rand(3,2))
rng2()
output
i = 0
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
i = 1
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
i = 2
[[0.56804456 0.92559664]
[0.07103606 0.0871293 ]
[0.0202184 0.83261985]]
i = 3
[[0.77815675 0.87001215]
[0.97861834 0.79915856]
[0.46147936 0.78052918]]
import numpy as np
def rng1():
print("rng1")
for i in range(4):
rng = np.random.RandomState(0)
print("i = %s" % i)
print(rng.rand(3,2))
print(rng.rand(3,2))
rng1()
def rng2():
print("rng2")
rng = np.random.RandomState(0)
for i in range(4):
print("i = %s" % i)
print(rng.rand(3,2))
rng2()
output
rng1
i = 0
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
i = 1
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
i = 2
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
i = 3
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
rng2
i = 0
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
i = 1
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
i = 2
[[0.56804456 0.92559664]
[0.07103606 0.0871293 ]
[0.0202184 0.83261985]]
i = 3
[[0.77815675 0.87001215]
[0.97861834 0.79915856]
[0.46147936 0.78052918]]
import numpy as np
def a_rand_seed_name_test():
print("a_rand_seed_name_test")
for i in range(4):
a_rand_seed= np.random.RandomState(0)
print("i = %s" % i)
print(a_rand_seed.rand(3,2))
print(a_rand_seed.rand(3,2))
a_rand_seed_name_test()
output
a_rand_seed_name_test
i = 0
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
i = 1
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
i = 2
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]
i = 3
[[0.5488135 0.71518937]
[0.60276338 0.54488318]
[0.4236548 0.64589411]]
[[0.43758721 0.891773 ]
[0.96366276 0.38344152]
[0.79172504 0.52889492]]