欢迎光临白事网
详情描述

1. 传统方法(legacy API)

注意: 从NumPy 1.17开始,推荐使用新方法,但旧方法仍可用。

import numpy as np

# 1.1 使用全局随机状态
np.random.seed(42)  # 设置随机种子

# 生成各种分布的随机数
random_float = np.random.rand()            # [0,1) 均匀分布
random_array = np.random.rand(3, 4)        # 3x4数组
random_uniform = np.random.uniform(1, 10, 5)  # [1,10) 均匀分布
random_normal = np.random.normal(0, 1, 10)  # 标准正态分布
random_integers = np.random.randint(0, 100, 10)  # 整数
random_choice = np.random.choice([1, 2, 3, 4, 5], size=10)  # 从数组中随机选择

2. 新版推荐方法(Generator API)

NumPy 1.17+ 推荐使用 np.random.Generator

import numpy as np

# 2.1 创建Generator实例
rng = np.random.default_rng(seed=42)  # 推荐方式

# 或者使用具体的BitGenerator
from numpy.random import PCG64, MT19937
rng_pcg = np.random.Generator(PCG64(seed=42))
rng_mt = np.random.Generator(MT19937(seed=42))

3. 常用随机数生成方法

3.1 基础随机数

# 创建Generator
rng = np.random.default_rng(seed=42)

# 均匀分布 [0,1)
print(rng.random())              # 单个值
print(rng.random((3, 4)))        # 数组

# 均匀分布 [low, high)
print(rng.uniform(1, 10, size=5))

# 标准正态分布
print(rng.standard_normal(10))
print(rng.normal(0, 1, 10))      # 指定均值和标准差

# 整数
print(rng.integers(0, 100, 10))
print(rng.integers(0, 100, (3, 4), endpoint=True))  # 包含上限

3.2 其他概率分布

# 二项分布
print(rng.binomial(10, 0.5, 100))

# 泊松分布
print(rng.poisson(5, 10))

# 指数分布
print(rng.exponential(1.0, 10))

# 卡方分布
print(rng.chisquare(2, 10))

# 贝塔分布
print(rng.beta(2, 5, 10))

# 伽马分布
print(rng.gamma(2, 2, 10))

4. 随机抽样和排列

# 随机选择
arr = np.arange(10)
print(rng.choice(arr, size=5))              # 不放回
print(rng.choice(arr, size=5, replace=True)) # 放回
print(rng.choice(arr, size=5, p=[0.1]*10))   # 指定概率

# 随机排列
arr = np.arange(10)
rng.shuffle(arr)  # 原地打乱
print(arr)

permuted = rng.permutation(10)  # 返回新数组
print(permuted)

# 随机抽样(高级)
samples = rng.choice(20, size=10, replace=False)  # 不重复抽样
print(samples)

5. 特殊随机数生成

# 多元正态分布
mean = [0, 0]
cov = [[1, 0.5], [0.5, 1]]
print(rng.multivariate_normal(mean, cov, 100))

# 狄利克雷分布
print(rng.dirichlet([1, 2, 3], 5))

# 随机bytes
print(rng.bytes(10))

6. 可重复性与并行处理

# 6.1 保存和恢复状态
rng = np.random.default_rng(seed=42)
state = rng.__getstate__()  # 获取当前状态

# 恢复状态
rng_restored = np.random.default_rng()
rng_restored.__setstate__(state)

# 6.2 并行处理中的随机数
# 为每个进程创建独立的Generator
seeds = np.random.SeedSequence(42).spawn(4)  # 生成4个种子
generators = [np.random.default_rng(s) for s in seeds]

7. 性能对比

import time

# 传统方法
start = time.time()
for _ in range(10000):
    np.random.rand(1000)
print(f"传统方法: {time.time() - start:.4f}秒")

# 新方法
rng = np.random.default_rng()
start = time.time()
for _ in range(10000):
    rng.random(1000)
print(f"新方法: {time.time() - start:.4f}秒")

8. 实际应用示例

# 示例1:蒙特卡洛模拟
def monte_carlo_pi(num_samples=1000000):
    rng = np.random.default_rng()
    x = rng.uniform(-1, 1, num_samples)
    y = rng.uniform(-1, 1, num_samples)
    inside_circle = (x**2 + y**2) <= 1
    return 4 * np.mean(inside_circle)

print(f"π ≈ {monte_carlo_pi()}")

# 示例2:数据增强中的随机噪声
def add_random_noise(data, noise_level=0.1):
    rng = np.random.default_rng(seed=42)
    noise = rng.normal(0, noise_level, data.shape)
    return data + noise

# 示例3:随机分割数据集
def train_test_split_random(X, y, test_size=0.2, random_state=42):
    rng = np.random.default_rng(random_state)
    n_samples = len(X)
    indices = rng.permutation(n_samples)
    test_count = int(n_samples * test_size)
    test_idx, train_idx = indices[:test_count], indices[test_count:]
    return X[train_idx], X[test_idx], y[train_idx], y[test_idx]

最佳实践建议

优先使用新版Generator API,性能更好,功能更丰富 固定随机种子以保证结果可重复性 避免全局随机状态,使用独立的Generator实例 在大规模并行计算中,使用SeedSequence确保随机数独立性

新方法(Generator API)不仅速度更快,而且提供了更丰富的功能和更好的统计特性,是现代NumPy项目的推荐选择。

相关帖子
宿迁市殡葬服务公司办理-白事丧事服务,殡葬花篮
宿迁市殡葬服务公司办理-白事丧事服务,殡葬花篮
商品房贷款费用政策调整了吗?最新监管动向与影响分析
商品房贷款费用政策调整了吗?最新监管动向与影响分析
针对自动驾驶事故的数据记录与分析,如何帮助我们更好地理解系统局限性?
针对自动驾驶事故的数据记录与分析,如何帮助我们更好地理解系统局限性?
公司经营贷额度与理财产品,银行存款换取高额度
公司经营贷额度与理财产品,银行存款换取高额度
宿迁市白事一条龙服务|白事灵堂策划,价格公道,快速上门
宿迁市白事一条龙服务|白事灵堂策划,价格公道,快速上门
商家搞
商家搞"免配送费"补贴的钱从哪来?为什么有的品类常年免运,有的几乎从不参与减免?
小区房子抵押贷款征信要求商业银行是什么?商业银行征信标准
小区房子抵押贷款征信要求商业银行是什么?商业银行征信标准
过桥业务结清全套流程,讲解对账、销户、领取凭证等收尾手续
过桥业务结清全套流程,讲解对账、销户、领取凭证等收尾手续
厦门市安卓app开发#品牌网站开发,提供一站式建站服务
厦门市安卓app开发#品牌网站开发,提供一站式建站服务
濮阳市短视频营销推广&网站开发建设,一站式建站服务
濮阳市短视频营销推广&网站开发建设,一站式建站服务
莆田市白事一站式服务|净身穿衣,24小时服务热线
莆田市白事一站式服务|净身穿衣,24小时服务热线
六盘水殡葬一条龙公司电话-办理丧事,葬礼服务
六盘水殡葬一条龙公司电话-办理丧事,葬礼服务
互联网平台汽车抵押贷款条件,全流程线上申请需要什么条件?
互联网平台汽车抵押贷款条件,全流程线上申请需要什么条件?
宁德市殡葬一条龙服务|殡葬灵棚布置,安全快捷
宁德市殡葬一条龙服务|殡葬灵棚布置,安全快捷
学历高低影响信用贷款额度?教育背景对小额信用贷的影响
学历高低影响信用贷款额度?教育背景对小额信用贷的影响
渭南市殡葬一条龙-白事一站式服务,葬礼花篮
渭南市殡葬一条龙-白事一站式服务,葬礼花篮
退货时使用非商家指定的快递公司,产生的运费差价或问题由谁负责?
退货时使用非商家指定的快递公司,产生的运费差价或问题由谁负责?
2026年,主流外卖平台的食品安全保险或理赔机制是否覆盖了异物问题?
2026年,主流外卖平台的食品安全保险或理赔机制是否覆盖了异物问题?
兰州市精准获客渠道#网站搭建服务,收费透明
兰州市精准获客渠道#网站搭建服务,收费透明
红河短视频推广&网站定制,服务可靠
红河短视频推广&网站定制,服务可靠
吕梁市定制化网站开发#专业网站建设设计,专业建站公司
吕梁市定制化网站开发#专业网站建设设计,专业建站公司