一、生成伪随机数
numpy.random模块补充了python内置的random模块,其中包含从多种概率分布中高效生成样本值的整个数组的函数。例如,您可以使用 numpy.random.standard_normal 从标准正态分布中获取 4 × 4 样本数组:
import numpy as np
samples = np.random.standard_normal(size=(4, 4))
print(samples)
输出:
[[ 0.91440739 -1.09376135 -0.12968644 0.43102929]
[-1.60296277 -0.48098121 -0.084185 -1.339922 ]
[ 1.06562732 -0.22993078 0.09371422 -0.72325676]
[-0.6425271 -0.44327938 -0.98561131 -2.6658581 ]]
其中numpy的random模块的standard_normal函数传递了一个参数size,指定了生成数组的形状。
Python 的内置 random 模块一次只生成一个值。从以下这个测试中可以看出,numpy.random 生成非常大的样本的速度要比Python内置的random快一个数量级以上。
上图中可以看出,用python自带的random生成标准正态分布1000000万个伪随机数样本耗时868ms,而使用numpy的random模块生成相同量的数据耗时31.1ms,这个要快一个数量级以上。
注意:这里我用了一个新插件,我再vs code中安装了jupyter交互式笔记本。
二、NumPy的random的默认推荐的构造函数default_rng()
np.random.default是NumPy中的一个类,用于生成高质量的随机数序列,适用于模拟和实验等领域。 该功能在NumPy 1.17版本中引入,通过调用np.random.default_rng()
函数创建一个随机数生成器对象。这个对象可以实现各种随机数生成函数,生成不同类型的随机数,如整数、浮点数、布尔值等。以下通过np.random.default_rng()
创建一个随机数生成器实例:
import numpy as np
rng = np.random.default_rng()
创建实例后,可以通过调用实例rng的方法生成所需的随机数。例如:
- 生成一个随机浮点数:
rng.random()
- 生成一个指定大小且值在指定范围内的随机整数二维数组:
rng.integers(low, high=None, size=None, dtype=np.int64)
- 生成具有特定平均值和方差的随机数数组:
rng.standard_normal(shape=None)
- 生成布尔值数组:
rng.choice(a, size=None, replace=True, p=None)
- 生成非负随机整数:
rng.noncentral_chisquare(df, nonc, size=None, dtype=np.float64)
此外,还可以设置种子值以确保结果的可重复性。例如:
import numpy as np
rng = np.random.default_rng(seed=36)
data = rng.standard_normal((2, 3))
print(data)
以上代码无论运行几次,由于设置了相同的种子,输出结果都相同,我的环境运行结果如下:
[[-1.10980586 -0.28793601 -0.26313362]
[-0.23681749 1.11880171 0.1331096 ]]
看下rng的类型type(rng) 输出 <class 'numpy.random._generator.Generator'>
三、NumPy随机数生成器的常用方法
四、通用函数:快速元素级数组函数
1. np.sqrt()求每个元素的平方根
arr = np.arange(10) # 输出 [0 1 2 3 4 5 6 7 8 9]
np.sqrt(arr) # 输出 [0. , 1. , 1.4142, 1.7321, 2. , 2.2361, 2.4495, 2.6458, 2.8284, 3. ]
2. np.exp()对数组中的每个元素进行以e为底的指数运算
arr = np.arange(10) # 输出 [0 1 2 3 4 5 6 7 8 9]
np.exp(arr)
# 输出 [ 1. , 2.7183, 7.3891, 20.0855, 54.5982, 148.4132, 403.4288, 1096.6332, 2980.958 , 8103.0839]
3. 元素级数组函数列表如下