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

Getting variance values for random samples generated from a standard normal distribution using numpy

我有一个函数可以根据对应于平均值的矩阵和对应于方差值的另一个矩阵给出每个 class 的概率分布。例如,如果我有四个 classes 那么我会有以下输出:

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 中存在的随机样本的方差度量。

使用 A 表示的矩阵的 row-wise 或 column-wise 方差]numpy.var() 没有给出类似的 10 x 4 矩阵与 y_variance[=39= 相乘].

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

首先使用以下代码行创建一个与 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 的计算.