NumPy生成随机数的常用函数详解与实战示例

小林子
小林子
发布时间:2026-10-15 | 4人浏览过
原创

本文系统梳理NumPy中生成随机数的核心函数,包括np.random.random、randint、normal、uniform及choice等。通过具体代码示例,展示如何生成指定形状、范围及分布的随机数组,并深入解析随机种子seed的作用机制。此外,结合概率抽样与大规模模拟实验,验证随机函数的实际输出分布特性,帮助开发者掌握NumPy随机数生成的关键技巧与注意事项。

NumPy随机数生成概述

在Python数据科学领域,NumPy库提供了多种高效生成随机数的方法。掌握这些函数对于数据模拟、算法测试及机器学习预处理至关重要。本文将逐一介绍几种最常用的随机数生成方式及其应用场景。

生成0-1随机浮点数

首先介绍生成指定形状的0到1之间随机浮点数的两种常用方法:np.random.random()和np.random.rand()。两者功能相似,但在参数传递方式上存在细微差别。


array1 = np.random.random((3))
display(array1)
# -----------------------------------
array2 = np.random.random((3,4))
display(array2)
# -----------------------------------
array3 = np.random.rand(3)
display(array3)
# -----------------------------------
array4 = np.random.rand(2,3)
display(array4)

具体操作示例如下所示。



通过对比代码可以看出,np.random.random()接受一个元组作为形状参数,例如(3)或(3,4);而np.random.rand()可以直接接受整数或元组作为参数,如3或(2,3)。尽管调用方式不同,它们生成的随机数范围均为[0.0, 1.0)。

生成指定范围随机整数

其次,若需要生成指定数值范围内的随机整数,应使用np.random.randint()函数。该函数允许用户精确控制随机整数的上下界、数组形状及数据类型。


具体操作代码如下。


array9 = np.random.randint(low=1, high=10, size=6, dtype=np.int32)
display(array9)
# ---------------------------------------------------------
array10 = np.random.randint(low=1, high=10, size=(2,3), dtype=np.int64)
display(array10)
# ---------------------------------------------------------
array11 = np.random.randint(low=1, high=10, size=(2,3,4), dtype=np.int32)
display(array11)

运行结果展示了不同形状和类型参数的输出效果。例如,生成一个长度为6的一维数组,或形状为(2,3)的二维数组,甚至可以是三维数组(2,3,4)。参数low和high分别指定了下界(包含)和上界(不包含),dtype则指定了整数的位宽,如np.int32或np.int64。

正态分布随机数生成

与正态分布相关的随机函数主要包括np.random.randn()和np.random.normal()。它们在统计学和信号处理中应用广泛,用于模拟服从正态分布的数据。

  • np.random.randn()专门用于生成服从标准正态分布的随机数,即均值为0,标准差为1。
  • np.random.normal()则更加灵活,允许用户指定均值(loc)和标准差(scale),从而生成任意正态分布的随机数。

array5 = np.random.randn(3)
display(array5)
# ---------------------------------------------
array6 = np.random.randn(2,3)
display(array6)
# ---------------------------------------------
array7 = np.random.normal(loc=2,scale=0.5,size=6)
display(array7)
# ---------------------------------------------
array8 = np.random.normal(loc=2,scale=0.5,size=6).reshape(2,3)
display(array8)

以下是具体的代码执行结果示例。


两者的主要区别在于参数配置。np.random.randn()无需指定均值和标准差,默认使用标准正态分布;而np.random.normal()需要显式传入loc和scale参数。例如,代码中生成均值为2、标准差为0.5的随机数,并通过reshape方法调整数组形状。

均匀分布随机数生成

除了正态分布,均匀分布也是常见的随机数类型。NumPy通过np.random.uniform()函数实现这一功能。

该函数的用法是生成指定下限和上限之间服从均匀分布的随机数,参数同样支持形状指定。


array11 = np.random.uniform(1,10,5)
display(array11)
# ---------------------------------
array12 = np.random.uniform(1,10,(2,3))
display(array12)

代码结果显示,可以生成一维或二维的均匀分布随机数组。例如,在1到10之间生成5个随机数,或生成一个2行3列的二维数组。

随机种子与可重复性

为了确保随机数生成的可重复性,NumPy提供了np.random.seed()函数。通过设置相同的随机种子,可以生成完全一致的随机数序列,这在调试和复现实验结果时非常有用。


具体操作代码如下。


np.random.seed(3)
a = np.random.rand(3)
display(a)
np.random.seed(3)
b = np.random.rand(3)
display(b)
# --------------------------
np.random.seed()
a = np.random.rand(3)
display(a)
np.random.seed()
b = np.random.rand(3)
display(b)

结果验证了种子机制的有效性。当设置相同的种子(如seed(3))时,后续生成的随机数组a和b完全一致。若调用seed()无参数或重置种子,则每次生成的随机数序列将不同。

数组元素打乱

另一个常用函数是np.random.shuffle(),它用于原地打乱数组元素的顺序,不返回新数组,而是直接修改原数组。


c = np.arange(10)
display(c)
np.random.shuffle(c)
display(c)

代码执行结果显示,原始数组c经过shuffle操作后,元素顺序被打乱,但元素内容保持不变。

按概率抽取随机元素

np.random.choice()函数允许从指定数组中按照给定的概率分布抽取随机元素。这在模拟加权随机事件时非常有用。

该函数的基本用法说明如下:第一个参数指定抽取的候选数组,第二个参数p指定每个元素被抽取的概率。


d = np.random.choice([1,2,3,4], p=[0.1, 0.2, 0.3, 0.4])
display(d)

具体而言,上述函数在单次实验中,从[1, 2, 3, 4]中抽取元素,其中抽取1的概率为0.1,抽取2的概率为0.2,抽取3的概率为0.3,抽取4的概率为0.4。概率之和必须为1。

单次抽取的结果示例如下。


为了验证概率分布的准确性,可以进行大规模重复实验。例如,进行10000次重复实验,统计每个数字被抽取到的频率。


list1 = [0,0,0,0]
for i in range(100000):
  f = np.random.choice([1,2,3,4], p=[0.1, 0.2, 0.3, 0.4])
  list1[f-1] = list1[f-1] + 1
display(list1)

result_list = [value/sum(list1) for value in list1]
display(result_list)

进一步地,可以模拟进行100000次掷硬币重复实验,检测每一面被抽取到的概率,以验证二项分布或均匀概率的收敛性。


在代码实现中,通过循环100000次调用np.random.choice([0,1], p=[0.5,0.5]),统计0和1出现的次数,并计算其比例。结果显示,随着实验次数增加,各结果出现的频率趋近于理论概率0.5。


list1 = [0,0]
for i in range(100000):
  f = np.random.choice([0,1], p=[0.5,0.5])
  list1[f] = list1[f] + 1
display(list1)

result_list = [value/sum(list1) for value in list1]
display(result_list)

最终的计算结果展示了统计频率与理论概率的接近程度,验证了随机函数的概率分布特性。

至此,关于NumPy中生成随机数的几种常用函数及其实际应用已介绍完毕。更多相关NumPy生成随机数的内容,建议参考本站历史文章或继续浏览后续技术文章,希望对大家有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表