使用numpy.random.multivariate_normal(mean,cov[,size])绘制多个样本

2024-05-14 22:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

使用numpy函数numpy.random.multivariate_normal(),如果我给出均值和协方差,我就可以从多元高斯函数中随机抽取样本。

举个例子

import numpy as np
mean = np.zeros(1000)  # a zero array shaped (1000,)
covariance = np.random.rand(1000, 1000) 
# a matrix of random values shaped (1000,1000)
draw = np.random.multivariate_normal(mean, covariance)
# this outputs one "draw" of a multivariate norm, shaped (1000,)

上面的函数从一个多元高斯函数中输出一个“draw”,形状为(1000,)(因为协方差矩阵是1000,1000))。

我想要200张。怎么做到的?我会创建一个列表理解,但我不知道如何创建迭代。

编辑:有区别吗

draw_A = np.random.rand(1000, 1000, 200)

以及

draw_B = [np.random.multivariate_normal(mean, covariance) for i in range(200)]

是吗?

是的,draw_B是一个列表,但它们都是200个独立的绘图形状吗?


Tags: of函数numpy列表nprandommeanmultivariate
1条回答
网友
1楼 · 发布于 2024-05-14 22:32:34

你注意到docstring中的size参数了吗?

例如,此调用从三维分布生成5个示例:

In [22]: np.random.multivariate_normal(np.zeros(3), np.eye(3), size=5)
Out[22]: 
array([[ 1.08534253,  0.70492174, -0.8625333 ],
       [ 0.16955737, -0.89453284,  0.8347796 ],
       [ 0.49506717, -1.18087912, -0.89118919],
       [-0.97837406, -0.42304268,  0.4326744 ],
       [-1.18836816,  1.33389231,  0.23616035]])

对编辑问题的答复:

  • np.random.rand(d0, d1, d2)从[0,1]上的单变量均匀分布中进行d0*d1*d2随机抽取,并以(d0, d1, d2)形状的数组返回它们。
  • np.random.multivariate_normal(mean, cov, size=n),其中mean是具有形状(m,)的数组,cov是具有形状(m, m)的数组,使n从多变量正态分布中绘制,并将它们作为具有形状(n, m)的数组的行返回。列表理解draw_B还从多元正态分布中抽取样本,每个函数调用一个样本,并将样本放入列表而不是数组中。

相关问题 更多 >

    热门问题