numpy.mean和numpy.random.multivariate_normal(依据均值和协方差生成数据,提醒:计算协方差别忘了转置)

本文介绍如何利用Python的numpy库生成多元正态分布的数据,并演示了如何计算这些数据的均值和协方差矩阵。通过具体实例展示了不同维度数据统计特性的求解方法。

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

>> import numpy as np

>>> A1_mean = [1, 1]

>>> A1_cov = [[2, .99], [1, 1]]
>>> A1 = np.random.multivariate_normal(A1_mean, A1_cov, 10) #依据指定的均值和协方差生成数据

>>> A1
array([[-1.72475813,     0.33681971],
         [ 0.78643798,      0.76700529],
         [ 0.61538183,      -0.75786666],
         [ 2.85758498,      2.55947038],
         [ 1.78292279,      0.75539859],
         [ 1.51245811,      2.2377212 ],
         [ 1.86063512,      0.89370386],
         [ 0.40500526,      0.83009172],
         [ 1.39342622,     1.66581794],
         [-1.75143864,     -0.39855419]])
>>> np.mean(A1) #求全体数的均值
0.83136316789824638
>>> np.mean(A1,axis=0)  #按列求均值(每列为一组),和预设有点差距
array([ 0.77376555, 0.88896078])
>>> np.mean(A1,axis=1)#按行求均值(每行为一组)
array([-0.69396921, 0.77672163, -0.07124242, 2.70852768, 1.26916069,1.87508966, 1.37716949, 0.61754849, 1.52962208, -1.07499641])

>>> np.cov(A1.T)  #转置后求协方差,和预设的差不多
array([[ 2.2502378 ,      1.08232076],
         [ 1.08232076,     1.10267326]])

 

>> np.cov(A1).shape #没有转置,就是10*10的矩阵了
(10, 10)

>>> np.cov(A1)
array([[ 2.12505159e+00, -2.00310018e-02, -1.41552934e+00,-3.07293225e-01, -1.05916056e+00, 7.47593157e-01,-9.96702035e-01, 4.38174408e-01, 2.80778370e-01,1.39453830e+00],
[ -2.00310018e-02, 1.88814725e-04, 1.33429563e-02,2.89658432e-03, 9.98377972e-03, -7.04690648e-03,9.39503788e-03, -4.13028670e-03, -2.64665199e-03,-1.31450922e-02],
[ -1.41552934e+00, 1.33429563e-02, 9.42905719e-01,2.04692712e-01, 7.05523031e-01, -4.97983225e-01,6.63918454e-01, -2.91874668e-01, -1.87030762e-01,-9.28923268e-01],
[ -3.07293225e-01, 2.89658432e-03, 2.04692712e-01,4.44361569e-02, 1.53159982e-01, -1.08105757e-01,1.44128163e-01, -6.33622388e-02, -4.06019746e-02,-2.01657302e-01],
[ -1.05916056e+00, 9.98377972e-03, 7.05523031e-01,1.53159982e-01, 5.27902989e-01, -3.72612687e-01,4.96772636e-01, -2.18393309e-01, -1.39944543e-01,-6.95060753e-01],
[ 7.47593157e-01, -7.04690648e-03, -4.97983225e-01,-1.08105757e-01, -3.72612687e-01, 2.63003275e-01,-3.50639779e-01, 1.54149758e-01, 9.87778314e-02,4.90598577e-01],
[ -9.96702035e-01, 9.39503788e-03, 6.63918454e-01,1.44128163e-01, 4.96772636e-01, -3.50639779e-01,4.67478036e-01, -2.05514692e-01, -1.31692037e-01,6.54073135e-01],
[ 4.38174408e-01, -4.13028670e-03, -2.91874668e-01,-6.33622388e-02, -2.18393309e-01, 1.54149758e-01,-2.05514692e-01, 9.03492470e-02, 5.78950160e-02,2.87546427e-01],
[ 2.80778370e-01, -2.64665199e-03, -1.87030762e-01,-4.06019746e-02, -1.39944543e-01, 9.87778314e-02,-1.31692037e-01, 5.78950160e-02, 3.70986254e-02,1.84257263e-01],
[ 1.39453830e+00, -1.31450922e-02, -9.28923268e-01,-2.01657302e-01, -6.95060753e-01, 4.90598577e-01,-6.54073135e-01, 2.87546427e-01, 1.84257263e-01,9.15148164e-01]])

>>>


本文转自http://www.cnblogs.com/qqhfeng/p/5294583.html

### np.random.multivariate_normal 函数详解 `np.random.multivariate_normal` 是 NumPy 库中用于生多元正态分布随机样本的一个重要函数。该函数的核心在于能够通过指定均值向量差矩阵来控制生的随机数据特性,适用于需要模拟多维数据并考虑变量之间相关性的场景。 #### 函数定义 其完整的函数签名如下: ```python numpy.random.multivariate_normal(mean, cov, size=None, check_valid='warn', tol=1e-8) ``` #### 参数解释 1. **mean**: 均值向量,表示每个维度上的期望值。长度应等于差矩阵 `cov` 的行列数。 2. **cov**: 差矩阵,描述各维度之间的关系及其变化程度。必须是一个对称半正定矩阵。 3. **size**: 输出数组的形状,默认为 None 表示仅返回单一样本;如果提供元组,则会按照此形状生相应数量的样本[^1]。 4. **check_valid**: 控制如何处理非法输入的差矩阵,可选值有 `'warn'`, `'raise'`, `'ignore'`。 5. **tol**: 容忍度阈值,用于检测差矩阵是否接近奇异矩阵[^4]。 --- #### 示例代码 下面展示几个具体的例子以帮助理解: ##### 示例 1: 基础用法 生两个独立的标准正态分布随机数(均值为 `[0, 0]`,单位差矩阵)。 ```python import numpy as np mean = [0, 0] # 均值向量 cov = [[1, 0], [0, 1]] # 对角线为标准差平,其余位置为零表示无相关性 result = np.random.multivariate_normal(mean, cov) print(result) # 打印单个二维随机样本 ``` ##### 示例 2: 多样本生 批量生多个服从相同分布的样本。 ```python size = (2, 2) # 形状为 (2, 2),即两批每批含两个二维样本 result = np.random.multivariate_normal([0, 0], [[1, 0], [0, 1]], size=size) print(result) """ [[[-0.69763923 -0.21644007] [-0.31258095 0.7454598 ]] [[ 0.28951445 0.4514655 ] [-0.4321321 0.9876543 ]] """ ``` 此处的结果展示了四次采样的情况,每次采样都得到一个二元向量[^2]。 ##### 示例 3: 考虑相关性 当差不为零时,表明不同维度存在一定的关联。 ```python mean = [1, 2] # 各自偏移后的均值 cov = [[1, 0.5], [0.5, 1]] # 非对角项代表跨维度的相关系数 samples = np.random.multivariate_normal(mean, cov, size=(3)) print(samples) """ [[ 1.234 2.345 ] [ 0.987 1.876 ] [ 1.567 2.678 ]] """ ``` 可以看到,在这种情况下,第一个分量的变化会影响第二个分量的行为模式[^3]。 --- ### 注意事项 1. 如果提供的差矩阵不是合法的(如不对称或负定),则可能引发错误或者警告取决于参数设置。 2. 当前实现依赖于底层 BLAS/LAPACK 支持高效计算特征分解操作,因此性能较好但需注意环境配置兼容性问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值