技术文摘
NumPy中用numpy.random.normal生成指定上下限正态分布随机数的方法
NumPy中用numpy.random.normal生成指定上下限正态分布随机数的方法
在数据分析和科学计算领域,NumPy是一个强大的Python库,其中numpy.random.normal函数常被用于生成正态分布的随机数。然而,有时我们需要生成在指定上下限内的正态分布随机数,这就需要一些额外的技巧。
numpy.random.normal函数的基本语法是numpy.random.normal(loc=0.0, scale=1.0, size=None)。其中,loc代表分布的均值,scale代表标准差,size则决定生成随机数的形状。例如,numpy.random.normal(0, 1, 10)会生成10个均值为0、标准差为1的正态分布随机数。
但如果想要生成在指定上下限内的随机数,一种常见的方法是对生成的随机数进行裁剪。我们可以先生成足够多的正态分布随机数,然后将超出上下限的数值裁剪掉。例如:
import numpy as np
# 设定均值、标准差、下限和上限
mean = 50
std = 10
lower_bound = 30
upper_bound = 70
# 生成一定数量的正态分布随机数
random_numbers = np.random.normal(mean, std, 1000)
# 裁剪随机数到指定上下限
clipped_numbers = np.clip(random_numbers, lower_bound, upper_bound)
# 选择前N个符合要求的随机数
N = 10
result = clipped_numbers[:N]
print(result)
在上述代码中,我们先生成了1000个均值为50、标准差为10的正态分布随机数,然后使用np.clip函数将这些随机数裁剪到30到70的范围内,最后选取了前10个符合要求的随机数。
另一种方法是通过拒绝采样来实现。拒绝采样的思路是,不断生成正态分布随机数,只保留那些落在指定上下限内的随机数,直到得到足够数量的随机数。代码示例如下:
import numpy as np
# 设定均值、标准差、下限和上限
mean = 50
std = 10
lower_bound = 30
upper_bound = 70
num_samples = 10
samples = []
while len(samples) < num_samples:
sample = np.random.normal(mean, std)
if lower_bound <= sample <= upper_bound:
samples.append(sample)
result = np.array(samples)
print(result)
在这个代码中,我们通过一个循环不断生成随机数,只有当随机数落在指定范围内时才将其添加到结果列表中,直到收集到足够数量的随机数。
通过这两种方法,我们可以在NumPy中利用numpy.random.normal生成满足指定上下限要求的正态分布随机数,为数据分析和模拟实验等工作提供了更多的灵活性。
TAGS: Numpy numpy.random.normal 指定上下限 正态分布随机数
- tf.keras 与 eager execution 解决复杂问题的绝招
- 小程序电商实战:51CTO 技术沙龙第 22 期
- InnoDB 行锁:如何锁住不存在的记录
- 机器学习绝非只是统计学的美化
- 23 种 Pandas 核心操作,你是否应当过一遍?
- 数据库索引究竟由何构成?
- 自注意力机制是什么?
- 单页应用中 HATEOAS 的实战运用
- InnoDB 并发极高的原因在此
- InnoDB 的 5 项最佳实践:知其所以然?
- InnoDB 中 select 为何会阻塞 insert ?
- 网站用户必备:25 个缺陷跟踪工具
- 老牌语言持续强劲,GO、Kotlin 等新语言为何难以破局?
- Ubuntu 中多个 PHP 版本的切换方法
- 面试中介绍项目经验的方法