【问题标题】:How to generate a random gaussian matrix with different variance along each axis如何生成沿每个轴具有不同方差的随机高斯矩阵
【发布时间】:2015-10-13 12:36:11
【问题描述】:

我想生成一个 N × M 随机高斯矩阵。我希望这个矩阵的方差沿第一个轴较低,而另一个轴较高。我尝试过使用 multivariate_normal 和 cov = [[sigma1, 0], [0, sigma2]],但我得到的是 2 个不同的 N x M 矩阵,第一个具有方差 sigma1,第二个具有方差 sigma2。

【问题讨论】:

    标签: python numpy statistics


    【解决方案1】:

    首先生成一个方差数组,然后逐行添加从具有较高方差的分布中采样的数字。

    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, :])=1np.var(test[:, 0])=np.var(test[:, 1])=...=np.var(test[:, 3])=10。我认为您的代码中不是这种情况
    • 所得矩阵 (a+b) 沿轴 = 0 的方差是 b 的方差的 2 次方,对吧?
    • 不,它只是原始方差(0)和b的方差(5)之和
    • 如果我插入一些更大的数字,这与我观察到的不匹配: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
    • @Anthony 抱歉,请参阅我的编辑。第二个方差是方差的总和,或者等效地是平方标准差的总和(在我的示例中为 1 和 3)
    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2018-10-26
    • 2012-11-21
    相关资源
    最近更新 更多