Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy获取标准正态分布生成的随机样本的方差值_Python_Numpy_Pytorch_Gaussian_Probability Distribution - Fatal编程技术网

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

Python 使用numpy获取标准正态分布生成的随机样本的方差值,python,numpy,pytorch,gaussian,probability-distribution,Python,Numpy,Pytorch,Gaussian,Probability Distribution,我有一个函数,它给出了每一类的概率分布,用一个对应于平均值的矩阵和另一个对应于方差值的矩阵表示。例如,如果我有四个类,那么我将有以下输出: 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(1

我有一个函数,它给出了每一类的概率分布,用一个对应于平均值的矩阵和另一个对应于方差值的矩阵表示。例如,如果我有四个类,那么我将有以下输出:

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)

我需要做一个类似的计算,这样我的输出_方差也将是一个(10 x 1)矩阵。但是,用标准正态分布的随机样本以同样的方式乘以方差是没有意义的,因为这也会导致负值。这是不可取的,因为我的最终目标是使用以下方法创建具有这些平均值及其相应方差值的正态分布:

torch.distributions.normal.Normal(loc=y_means, scale=y_variance)
所以我的问题是,是否有任何方法可以为numpy.random.randn生成的每个随机样本获取方差值?因为这样一个矩阵的多重应用在输出方差方面更有意义


或者,如果有任何其他策略我可能不知道,请让我知道。

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

使用numpy.var()获取由a表示的矩阵的行或列方差,不会得到类似的10 x 4矩阵与y_方差相乘

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

首先使用以下代码行创建一个矩阵,该矩阵的维数与具有零个条目的矩阵相同:

A_var = np.zeros_like(A)
然后,使用torch.distributions创建正态分布,A中的值作为平均值,0作为方差:

dist_A = torch.distributions.normal.Normal(loc=torch.Tensor(A), scale=torch.Tensor(A_var))
列出PyTorch中正态分布的所有可能操作。sample()方法可以从任意大小的给定分布生成样本。利用此属性首先生成大小为10 X 10 X 4的样本矩阵,然后计算沿轴0的方差

np.var(np.array(dist2.sample((10,))),axis=0)
这将产生大小为10 x 4的方差矩阵,可用于y_方差的计算