numpy中随机正态分布矩阵

时间:2018-05-22 14:11:58

标签: python numpy

我想生成矩阵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]]

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

1 个答案:

答案 0 :(得分:3)

实现目标的预期方式是

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

这是可选的size参数,它告诉numpy你想要返回什么样的形状(在这种情况下是3乘3)。

你的第二种方式也有效,因为文档说明了

  

如果size为None(默认值),则如果loc和scale都是标量,则返回单个值。否则,绘制np.broadcast(loc,scale).size样本。

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