使用numpy获取从标准正态分布生成的随机样本的方差值

问题描述

我有一个函数,可以根据对应于平均值的矩阵和对应于方差值的另一个矩阵,为我提供每种类别的概率分布。例如,如果我有四个班级,那么我将得到以下输出:

y_means = [1,2,3,4]
y_variance = [0.01,0.02,0.03,0.04]

我需要对平均值进行以下计算,以继续执行我的程序的其余部分:

y_means = np.array(y_means)
y_means = np.reshape(y_means,(y_means.size,1))
A = np.random.randn(10,y_means.size)
y_means = np.matmul(A,y_means)

在这里,我使用了 numpy.random.randn 函数从标准正态分布中生成随机样本,然后将其与具有平均值的矩阵相乘以获得新的输出矩阵。这样,输出矩阵的尺寸将为(10 x 1)。

我需要进行类似的计算,以便我的 output_variances 也将是(10 x 1)矩阵。但是,将方差与标准正态分布中的随机样本以相同方式相乘是没有意义的,因为这也会导致产生负值。这是不可取的,因为我的最终目标是使用以下平均值和相应的方差值创建正态分布:

torch.distributions.normal.Normal(loc=y_means,scale=y_variance)

所以我的问题是,是否有任何方法可以获取 numpy.random.randn 生成的每个随机样本的方差值?因为这样一来,使用 output_variance 这样的矩阵的乘法将更有意义。

或者,如果有其他我可能不知道的策略,请告诉我。

解决方法

问题中提到的问题需要另一个与 A 维度相同的矩阵,该矩阵对应于A中存在的随机样本的方差度量。

使用 numpy.var()对以 A 表示的矩阵进行行或列方差分析没有给出类似的 10 x 4 矩阵与 y_variance 相乘。

我已经通过以下方法解决了上述问题:

首先使用以下代码行创建一个与A尺寸相同的矩阵(零项):

A_var = np.zeros_like(A)

然后使用 torch.distributions 创建正态分布,其中A中的值为平均值,零为方差:

dist_A = torch.distributions.normal.Normal(loc=torch.Tensor(A),scale=torch.Tensor(A_var))

https://pytorch.org/docs/stable/distributions.html列出了PyTorch中正态分布上所有可能的操作。 sample()方法可以根据给定的分布生成任意大小的样本。利用此属性,首先生成大小为 10 X 10 x 4 的样本矩阵,然后计算沿轴0的方差。

np.var(np.array(dist2.sample((10,))),axis=0)

这将导致大小为 10 x 4 的方差矩阵,可用于使用 y_variance 进行计算。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...