【发布时间】:2015-10-13 12:36:11
【问题描述】:
我想生成一个 N × M 随机高斯矩阵。我希望这个矩阵的方差沿第一个轴较低,而另一个轴较高。我尝试过使用 multivariate_normal 和 cov = [[sigma1, 0], [0, sigma2]],但我得到的是 2 个不同的 N x M 矩阵,第一个具有方差 sigma1,第二个具有方差 sigma2。
【问题讨论】:
标签: python numpy statistics
我想生成一个 N × M 随机高斯矩阵。我希望这个矩阵的方差沿第一个轴较低,而另一个轴较高。我尝试过使用 multivariate_normal 和 cov = [[sigma1, 0], [0, sigma2]],但我得到的是 2 个不同的 N x M 矩阵,第一个具有方差 sigma1,第二个具有方差 sigma2。
【问题讨论】:
标签: python numpy statistics
首先生成一个方差数组,然后逐行添加从具有较高方差的分布中采样的数字。
M = 20
N = 20
a = np.random.normal(0, 1, (N, M))
b = np.random.normal(0, 3, N)[:, None]
print np.var(a + b, axis=0)
print np.var(a + b, axis=1)
对一行添加相同的数字不会改变它的方差:var(X + k) = var(X),所以行的方差是不变的。 但是考虑一列,由于独立高斯之和的方差是它们的方差之和,因此您增加了方差。
这里第一个方差是 1(不变),第二个是(大约)1^2 + 3^2(a 和 b 的输入是标准开发,而不是方差)。
【讨论】:
np.var(test[0, :])=np.var(test[1, :])=...=np.var(test[5, :])=1 和np.var(test[:, 0])=np.var(test[:, 1])=...=np.var(test[:, 3])=10。我认为您的代码中不是这种情况
M = 400 N = 1000 cov = np.diag(np.ones(M)) mean = np.zeros(M) a = np.random.multivariate_normal(mean, cov, N) b = np.random.normal(0, 10, N)[:, None] In[13]: np.mean(np.var(a+b, axis=0)) Out[13]: 96.145156028149827 In[14]: np.mean(np.var(a+b, axis=1)) Out[14]: 0.9977979271523072