欢迎光临白事网
详情描述

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开发&python开源商城二次开发,一站式建站服务
宜春市苹果系统app开发&python开源商城二次开发,一站式建站服务
房产证红本抵押贷款切勿触碰红线,合规使用资金避免法律风险
房产证红本抵押贷款切勿触碰红线,合规使用资金避免法律风险
如何通过参与社区文明养犬宣传活动,来为自己积累正向的养犬信用?
如何通过参与社区文明养犬宣传活动,来为自己积累正向的养犬信用?
在数字经济时代,个人技能与薪酬的绑定关系发生了哪些值得关注的变化?
在数字经济时代,个人技能与薪酬的绑定关系发生了哪些值得关注的变化?
2026年,订阅制服务面临考验,哪些值得保留哪些可以果断取消?
2026年,订阅制服务面临考验,哪些值得保留哪些可以果断取消?
天津市安卓系统app开发#网站建设服务,提供一站式建站服务
天津市安卓系统app开发#网站建设服务,提供一站式建站服务
新乡市殡葬一条龙价格|丧葬灵堂,一年365天
新乡市殡葬一条龙价格|丧葬灵堂,一年365天
2026年不同城市的公积金年度结息政策会有大的差异吗?
2026年不同城市的公积金年度结息政策会有大的差异吗?
丽水市网站SEO优化#网站建设服务公司,优秀设计团队
丽水市网站SEO优化#网站建设服务公司,优秀设计团队
肇庆市精准获客助手&网站搭建服务,优秀开发团队
肇庆市精准获客助手&网站搭建服务,优秀开发团队
安阳市白事服务办理|灵堂守灵,价格透明,1小时上门
安阳市白事服务办理|灵堂守灵,价格透明,1小时上门
在返聘期间,个人是否需要继续自行缴纳社保或购买相关商业保险?
在返聘期间,个人是否需要继续自行缴纳社保或购买相关商业保险?
十堰市殡葬服务热线-白事服务公司,白事出殡服务
十堰市殡葬服务热线-白事服务公司,白事出殡服务