python生成多组正态分布序列

正态分布随机数应用广泛,有时候我们需要生成多组正态分布的随机数序列,而且组数和每组的个数我们也希望能自己设定。本文给出了能实现这一工作的python代码。本程序中,设定随机种子为1,目的是使得每一次程序运行都能得到相同的随机数结果,如果你想每次程序都得到不同结果,则可以删掉r.seed(1)这行代码或者设置其参数为0。另外,生成的多组正态分布随机序列被以嵌套列表的形式储存。

'''生成多组正态分布随机序列'''
import random as r
r.seed(1)
ss=[]
row=20#样本个数(组数)
col=10#样本容量(每组的个数)
for j in range(1,row+1):
    s=[]
    for i in range(1,col+1):
        v=round((r.normalvariate( 0, 1)),2)
        s.append(v)
    ss.append(s)
for k in range(row):
    print(ss[k])

运行结果如下:

[0.61, -0.01, 1.23, 1.02, -0.34, 1.22, -0.84, -0.21, -0.6, -0.89]
[1.31, 0.3, -0.97, 1.32, 1.3, 1.72, -0.82, 0.02, -1.05, 0.87]
[-1.24, 1.07, -0.38, 0.07, 0.06, -0.02, -0.22, 0.21, 1.01, 0.8]
[0.5, 0.25, -0.88, 1.1, 0.18, 0.15, 0.02, -0.38, 0.18, 0.36]
[-1.33, -2.65, 0.32, 0.58, -1.79, -0.29, -1.24, -0.78, 0.67, -0.58]
[-1.33, -0.17, 0.02, 0.99, -2.16, -1.97, 0.67, 1.06, -1.35, -0.43]
[-0.83, -1.08, -2.35, 0.72, 0.15, 0.71, -0.32, -1.55, -0.14, -2.03]
[-0.7, -2.33, -0.76, -0.35, 1.84, 1.13, 2.1, -1.84, -1.66, -0.86]
[0.9, 1.11, 0.93, -0.39, 1.59, -1.39, -0.71, 0.78, 0.16, -0.98]
[1.54, 1.34, -1.79, 0.32, -1.04, 1.45, -0.79, -1.73, 0.99, -0.81]
[-1.97, 1.18, 0.3, -0.34, -1.28, 0.95, -0.9, -0.44, -1.0, 1.5]
[0.73, 1.24, -0.49, -2.06, 0.97, -0.62, 0.34, -0.47, 0.09, -2.0]
[-1.73, -0.08, -1.19, 0.55, 0.81, -1.39, 1.02, 2.3, 0.4, -0.14]
[1.11, -0.45, 0.18, 1.1, -0.27, 0.43, 0.13, -0.29, -0.87, 0.94]
[-0.44, 0.1, 0.45, 1.19, -0.89, -0.05, -0.34, -1.09, 0.16, 0.95]
[2.19, -0.74, 1.0, -0.74, -1.13, 1.1, -0.54, -2.13, 1.42, 0.91]
[-1.25, 1.31, 0.92, -0.85, 0.29, -0.93, -1.72, -0.11, 0.55, 0.73]
[-0.81, -0.94, -1.35, -0.11, 1.07, -0.28, 2.22, -1.25, 0.18, 0.01]
[0.05, -0.18, -0.56, 1.53, -0.04, -0.26, 1.42, 1.16, 1.55, 0.97]
[-0.4, 0.44, -0.33, -1.17, 0.54, -0.05, 0.69, 0.38, 0.61, 1.37]

### 使用 Python 生成多组蒙特卡罗正态分布随机数 为了生成多组遵循正态分布的蒙特卡罗模拟随机数,可以利用 `numpy` 和 `scipy.stats` 库来实现这一目标。下面展示了一个具体的例子。 #### 方法一:基于 NumPy 的方法 ```python import numpy as np def generate_normal_random_numbers_numpy(mean=0, std_dev=1, num_samples=1000): """使用NumPy生成指定数量的标准正态分布样本""" samples = np.random.normal(loc=mean, scale=std_dev, size=num_samples) return samples # 参数设置 mu = 5 # 均值 sigma = 2 # 标准差 n = 10000 # 样本大小 # 调用函数并打印部分结果 normal_samples_numpy = generate_normal_random_numbers_numpy(mu, sigma, n) print(f"前五个数值: {normal_samples_numpy[:5]}") ``` 此段代码展示了如何借助于 `np.random.normal()` 函数快速简便地获取大量服从特定参数设定下的正态分布数据[^1]。 #### 方法二:采用 Box-Muller 变换法 另一种方式则是手动编写 Box-Muller 算法来自定义生成过程: ```python import numpy as np def box_muller_sampling(mu=0, sigma=1, size=1): u = np.random.uniform(size=size) v = np.random.uniform(size=size) z = np.sqrt(-2 * np.log(u)) * np.cos(2 * np.pi * v) return mu + z * sigma # 设置相同的参数用于比较不同方法的结果一致性 box_muller_results = box_muller_sampling(mu, sigma, n) # 输出对比两个不同的采样器产生的头几个值 print("\nBox-Muller变换得到的前五个数值:") print(box_muller_results[:5]) ``` 这段程序实现了经典的 Box-Muller 抽样技术,它同样能够有效地产生所需的正态分布序列。 #### 方法三:运用 Scipy 统计模块 对于更复杂的统计需求来说,Scipy 提供了更为丰富的工具集来进行概率密度估计和其他高级操作: ```python from scipy.stats import norm def monte_carlo_simulation_scipy(num_trials=1000, mean=0, stddev=1): dist = norm(loc=mean, scale=stddev) simulations = [] for _ in range(num_trials): trial_result = dist.rvs() simulations.append(trial_result) return np.array(simulations).reshape((-1,)) monte_carlo_output = monte_carlo_simulation_scipy(n, mu, sigma) print("\nSciPy stats.norm rvs() 得到的前五个数值:") print(monte_carlo_output[:5]) ``` 这里采用了 `scipy.stats.norm` 类中的 `.rvs()` 方法执行多次试验以构建完整的蒙特卡洛仿真框架[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值