代码之家  ›  专栏  ›  技术社区  ›  user3639557

一个随机正态分布矩阵

  •  1
  • user3639557  · 技术社区  · 6 年前

    我想生成一个矩阵m,其元素m(i,j)来自标准正态分布。一个简单的方法是,

    import numpy as np
    
    A = [ [np.random.normal() for i in range(3)]    for j in range(3) ]
    A = np.array(A)
    print(A)
    
    [[-0.12409887  0.86569787 -1.62461893]
     [ 0.30234536  0.47554092 -1.41780764]
     [ 0.44443707 -0.76518672 -1.40276347]]
    

    但是,我和numpy玩的时候遇到了另一个“解决方案”:

    import numpy as np
    import numpy.matlib as npm
    
    A = np.random.normal(npm.zeros((3, 3)), npm.ones((3, 3)))
    print(A)
    
    [[ 1.36542538 -0.40676747  0.51832243]
     [ 1.94915748 -0.86427391 -0.47288974]
     [ 1.9303462  -1.26666448 -0.50629403]]
    

    我读了 document 对于 numpy.random.normal 它说,它并没有说明当传递矩阵而不是单个值时,这个函数是如何工作的。我怀疑在第二个“解”中,我可能是从多元正态分布中得出的。但这不可能是真的,因为输入参数都有相同的维(协方差应该是一个矩阵,平均值是一个向量)。不确定第二个代码正在生成什么。

    1 回复  |  直到 6 年前
        1
  •  3
  •   StefanS    6 年前

    做你想做的事的目的是

    A = np.random.normal(0, 1, (3, 3))
    

    这是可选的 size 告诉numpy要返回什么形状的参数(本例中是3乘3)。

    您的第二种方法也可以,因为文档说明

    如果size为none(默认值),那么如果loc和scale都是scalar,则返回单个值。否则,NP.广播(loc,scale)。将绘制尺寸样本。

    因此没有多变量分布,也没有相关性。