技术文摘
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 指定上下限 正态分布随机数
- 七个 JavaScript Web API 助力构建未知的未来网站
- 时间序列周期的三种计算方法
- LoongArch 架构之 TLB 异常处理(四)
- 2023 年全新且完备的 VSCode 插件推荐
- Kafka 源码中 Sender 线程架构设计的图解
- Pixijs 一同学习(一):常见图形绘制之法
- ClickHouse 查询性能的突出优势
- 压测与性能分析的方法之道
- 微软 Visual Studio 2022 17.5 集成开发环境正式发布
- 百度工程师论分布式日志
- 前端知识分享:必知的五种 JS 错误处理办法
- 网络性能不佳?专家助你解决——昇腾 AI 黑科技 | 网络调优专家 AOE 实现性能效率双升
- 十款极具价值的 Web 开发 Github 资源库
- VS code 实用小技巧,让工作效率瞬间飙升!
- Golang 与 Rust 用于服务端开发,谁更适宜?