NumPy 提供了强大的随机数生成功能,可以用于创建各种类型的随机数组。这些随机数组在模拟、统计、机器学习等领域都有广泛的应用。
在 NumPy 中,常用的随机数组生成函数如下表所示。
| 函数 | 说明 |
|---|---|
| numpy.random.rand() | 生成 [0, 1) 之间的均匀分布的随机数 |
| numpy.random.randn() | 生成标准正态分布(均值为 0,标准差为 1)的随机数 |
| numpy.random.randint() | 生成指定范围内的随机整数 |
| numpy.random.random() | 生成 [0.0, 1.0) 之间的随机浮点数 |
| numpy.random.choice() | 从给定的数组中随机选择元素 |
| numpy.random.uniform() | 生成指定范围的均匀分布随机数 |
| numpy.random.normal() | 生成正态分布随机数 |
numpy.random.rand()
在 NumPy 中,我们可以使用 numpy.random.rand() 函数来生成服从均匀分布的随机数,取值范围为 [0, 1)。
语法:
numpy.random.rand(d0, d1, ..., dn)说明:
参数 d0, d1, ..., dn 用于指定输出数组的形状。
示例 1:numpy.random.rand() 基本用法
import numpy as np
arr = np.random.rand(3, 4)
print(arr)运行结果如下。
[[0.2235847 0.8605636 0.59873243 0.78467937]
[0.50126485 0.21217406 0.19498525 0.99207028]
[0.42074887 0.95288898 0.06596117 0.30534783]]分析:
numpy.random.rand(3, 4) 表示生成一个 3 行 4 列的二维数组,数组中的每个元素都是 [0, 1) 之间的随机浮点数。
numpy.random.randn()
在 NumPy 中,我们可以使用 numpy.random.randn() 函数来生成标准正态分布(均值为 0,标准差为 1)的随机数。
语法:
numpy.random.randn(d0, d1, ..., dn)说明:
参数 d0, d1, ..., dn 用于指定输出数组的形状。
示例 2:numpy.random.randn() 基本用法
import numpy as np
arr = np.random.randn(2, 2)
print(arr)运行结果如下。
[[ 0.21328335 -1.18205563]
[ 1.21662944 -0.34025996]]分析:
numpy.random.randn(2, 2) 表示生成一个 2 行 2 列的二维数组,数组中的每个元素都是符合标准正态分布的随机浮点数。
numpy.random.randint()
在 NumPy 中,我们可以使用 numpy.random.randint() 函数来生成指定范围内的随机整数。
语法:
numpy.random.randint(
low,
high=None,
size=None,
dtype=int
)说明:
numpy.random.randint() 函数接收以下 4 个参数。
low(必选): 最小值(包含)。high(可选): 最大值(不包含)。如果省略,则范围是:[0, low)。size(可选,默认:None): 输出数组的形状。如果是 None,则返回一个随机数。dtype(可选,默认:int): 输出数组的数据类型。
示例 3:numpy.random.randint() 基本用法
import numpy as np
arr = np.random.randint(5, size=(2, 4))
print(arr)运行结果如下。
[[3 4 2 1]
[3 1 3 0]]分析:
numpy.random.randint(5, size=(2, 4)) 表示生成 2 行 4 列的数组,元素范围为 [0, 5)。如果需要指定上限,可以使用 low 和 high 这 2 个参数,比如 low = 10, high = 20 生成 10 到 19 的整数。
numpy.random.random()
在 NumPy 中,我们可以使用 numpy.random.random() 函数来生成服从均匀分布的随机浮点数,取值范围为 [0.0, 1.0)。
语法:
numpy.random.random(size=None)说明:
numpy.random.random() 函数接收单个参数。
size(可选,默认:None):输出数组的形状。如果为 None,则返回一个随机数。
提示: numpy.random.random() 和 numpy.random.rand() 这 2 个函数的功能相同,但参数形式不同。
示例 4:numpy.random.random() 基本用法
import numpy as np
arr = np.random.random((2, 3))
print(arr)运行结果如下。
[[0.99401311 0.73917034 0.65516661]
[0.24490601 0.36247766 0.37052068]]分析:
numpy.random.random((2, 3)) 表示用于生成一个 2 行 3 列的二维数组,数组中的每个元素都是 [0.0, 1.0) 之间的随机浮点数。
numpy.random.choice()
在 NumPy 中,我们可以使用 numpy.random.choice() 函数来从给定的数组中随机选择元素。
语法:
numpy.random.choice(
a,
size=None,
replace=True,
p=None
)说明:
numpy.random.choice() 函数接收以下 4 个参数。
a(必选): 输入数组或整数。如果为整数,此时等价于:numpy.arange(a)。size(可选,默认:None): 数组的形状。replace(可选,默认:True): 是否允许重复选择。p(可选): 每个元素被选择的概率,默认为均匀分布。
示例 5:numpy.random.choice() 基本用法
import numpy as np
arr = np.random.choice([1, 2, 3, 4, 5], size=(3,), replace=False)
print(arr)运行结果如下。
[2 5 1]分析:
numpy.random.choice([1, 2, 3, 4, 5], size=(3,), replace=False) 表示从数组 [1, 2, 3, 4, 5] 中随机选择了 3 个不重复的元素。
numpy.random.uniform()
在 NumPy 中,我们可以使用 numpy.random.uniform() 函数生成指定范围的均匀分布随机数。
语法:
numpy.random.uniform(
low=0.0,
high=1.0,
size=None
)说明:
numpy.random.uniform() 函数接收以下 3 个参数。
low(可选,默认:0.0): 最小值(包含)。high(可选,默认:1.0): 最大值(不包含)。size(可选,默认:None): 输出形状。
示例 6:numpy.random.uniform() 基本用法
import numpy as np
arr = np.random.uniform(-5, 5, size=(2, 2))
print(arr)运行结果如下。
[[ 2.316781 -3.457233]
[-1.223456 4.891234]]分析:
numpy.random.uniform(-5, 5, size=(2,2)) 表示生成 2×2 数组,元素均匀分布在 [-5, 5) 区间。
numpy.random.normal()
在 NumPy 中,我们可以使用 numpy.random.normal() 函数生成正态分布随机数。
语法:
numpy.random.normal(
loc=0.0,
scale=1.0,
size=None
)说明:
numpy.random.normal() 函数接收以下 3 个参数。
loc(可选,默认:0.0): 均值。scale(可选,默认:1.0): 标准差(非负数)。size(可选,默认:None): 输出形状。
示例 7:numpy.random.normal() 基本用法
import numpy as np
arr = np.random.normal(10, 2, size=5)
print(arr)运行结果如下。
[12.456734 8.934562 11.023456 9.567834 10.345678]分析:
numpy.random.normal(10, 2, size=5) 表示生成均值为 10、标准差为 2 的正态分布样本。
设置随机数种子
为了使随机数生成具有可重复性,我们可以使用 numpy.random.seed() 函数来设置一个随机数种子。然后相同的种子,会生成相同的随机数序列。
示例 8:NumPy 设置随机数种子
import numpy as np
np.random.seed(0)
arr1 = np.random.rand(2, 2)
np.random.seed(0)
arr2 = np.random.rand(2, 2)
print(np.array_equal(arr1, arr2))运行结果如下。
True分析:
从结果可以看出,如果使用相同的随机数种子,那么生成的随机数序列也是相同的。
