在numpy中生成一个随机正态分布的矩阵

4
我希望生成一个矩阵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文档,它并没有解释当传递矩阵而不是单个值时该函数如何工作。我怀疑在第二个“解决方案”中可能会从多元正态分布中抽取样本,但这不可能是真的,因为输入参数都具有相同的维度(协方差应该是一个矩阵,平均值是一个向量)。不确定第二段代码生成了什么。


1
np.random.normal(0,1,(3,3)) - sacuL
1个回答

10

您想要做的方法是

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

这是可选的size参数,用于告诉NumPy您想要返回的形状(在本例中为3×3)。

第二种方法也可以使用,因为文档说明如下:

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

因此不存在多变量分布和相关性。


1
谢谢,已修复。 - StefanS
1
我认为这很有用,但并没有回答问题中第二段代码的问题。 - Sasha Tsukanov
也修复了那个。 - StefanS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接