我想生成一个矩阵 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]]
Run Code Online (Sandbox Code Playgroud)
但是,我在玩 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]]
Run Code Online (Sandbox Code Playgroud)
我阅读了的文档numpy.random.normal,它说它没有阐明当传递矩阵而不是单个值时该函数如何工作。我怀疑在第二个“解决方案”中我可能会从多元正态分布中得出。但这不可能是真的,因为输入参数都具有相同的维度(协方差应该是矩阵,平均值是向量)。不确定第二个代码生成了什么。
Ste*_*anS 10
做你想做的事情的预期方法是
A = np.random.normal(0, 1, (3, 3))
Run Code Online (Sandbox Code Playgroud)
这是可选size参数,告诉 numpy 您想要返回什么形状(在本例中为 3 x 3)。
你的第二种方法也有效,因为文档指出
如果 size 为 None (默认),并且 loc 和 scale 都是标量,则返回单个值。否则,将抽取 np.broadcast(loc,scale).size 样本。
所以不存在多元分布,也不存在相关性。
| 归档时间: |
|
| 查看次数: |
13268 次 |
| 最近记录: |