python 生成随机一维或多维正态分布

本文通过Python演示了一维和二维正态分布的多种生成方法,包括使用numpy库的不同函数实现相同的目标,并展示了如何通过matplotlib进行可视化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



作者:采石工
链接:https://www.zhihu.com/question/39823283/answer/115241445
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

# coding=utf-8

import numpy as np
from numpy.linalg import cholesky
import matplotlib.pyplot as plt

sampleNo = 1000;
# 一维正态分布
# 下面三种方式是等效的
mu = 3
sigma = 0.1
np.random.seed(0)
s = np.random.normal(mu, sigma, sampleNo )
plt.subplot(141)
plt.hist(s, 30, normed=True)

np.random.seed(0)
s = sigma * np.random.randn(sampleNo ) + mu
plt.subplot(142)
plt.hist(s, 30, normed=True)

np.random.seed(0)
s = sigma * np.random.standard_normal(sampleNo ) + mu
plt.subplot(143)
plt.hist(s, 30, normed=True)

# 二维正态分布
mu = np.array([[1, 5]])
Sigma = np.array([[1, 0.5], [1.5, 3]])
R = cholesky(Sigma)
s = np.dot(np.random.randn(sampleNo, 2), R) + mu
plt.subplot(144)
# 注意绘制的是散点图,而不是直方图
plt.plot(s[:,0],s[:,1],'+')
plt.show()



### 使用 Python 绘制二维正态分布随机抽样散点图 为了绘制二维正态分布随机抽样散点图,可以借助 `numpy` 生成满足二维正态分布的数据样本,并使用 `matplotlib` 进行可视化。以下是具体方法和代码示例。 #### 生成二维正态分布数据 可以通过 `numpy.random.multivariate_normal(mean, cov, size)` 函数生成二维多维正态分布随机数[^1]。其中: - `mean` 是均值向量; - `cov` 是协方差矩阵; - `size` 表示要生成的样本数量。 以下是一个完整的代码示例: ```python import numpy as np import matplotlib.pyplot as plt # 定义均值向量和协方差矩阵 mean = [0, 0] # 均值分别为 (0, 0) cov = [[1, 0.5], [0.5, 1]] # 协方差矩阵定义变量间的相关性和各自的标准差 # 生成二维正态分布随机样本 data = np.random.multivariate_normal(mean, cov, 500) # 生成500个样本 # 将数据拆分为x和y坐标 x, y = data.T # 设置字体以便支持中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] # 创建散点图 plt.figure(figsize=(8, 6)) plt.scatter(x, y, alpha=0.6, edgecolors='w', c='b') # alpha控制透明度,c控制颜色 # 添加标题和坐标轴标签 plt.title('二维正态分布随机抽样散点图') plt.xlabel('X 轴') plt.ylabel('Y 轴') # 显示图形 plt.grid(True) # 添加网格线 plt.show() ``` 这段代码实现了基于给定均值向量 `[0, 0]` 和协方差矩阵 `[[1, 0.5], [0.5, 1]]` 的二维正态分布随机抽样的散点图绘制[^1]。 --- #### 自定义参数调整 如果希望改变分布特性,比如增加减少变量之间的相关性,只需修改协方差矩阵中的非对角元素即可。例如,将协方差矩阵改为 `[[1, -0.8], [-0.8, 1]]`,则会得到负相关的分布形态[^1]。 另外,还可以通过更改 `scatter()` 中的颜色 (`c`) 大小 (`s`) 参数来自定义散点样式[^2]。 --- #### 结果解释 最终生成的散点图反映了二维正态分布的概率密度特征。由于采用了透明度设置 (`alpha=0.6`),重叠区域显得更加密集,直观体现了概率较高的区域位置[^2]。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值