如果我有n个均值矢量,n个方差矢量,那我该怎么办?
z ∼ N (μ, σ)
import torch
x = torch.randn(3, 3)
mu = x.mean()
sigma = x.var()
我该怎么做才能得到z?
答案 0 :(得分:1)
如果您想从均值mu
和 std sigma
的正态分布中抽样,则可以简单地
z = torch.randn_like(mu) * sigma + mu
如果您对许多这样的z
进行采样,它们的均值和std将收敛到sigma
和mu
:
mu = torch.arange(10.)
Out[]: tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
sigma = 5. - 0.5 * torch.arange(10.)
Out[]: tensor([5.0000, 4.5000, 4.0000, 3.5000, 3.0000, 2.5000, 2.0000, 1.5000, 1.0000, 0.5000])
z = torch.randn(10, 1000000) * sigma[:, None] + mu[:, None]
z.mean(dim=1)
Out[]:
tensor([-5.4823e-03, 1.0011e+00, 1.9982e+00, 2.9985e+00, 4.0017e+00,
4.9972e+00, 6.0010e+00, 7.0004e+00, 7.9996e+00, 9.0006e+00])
z.std(dim=1)
Out[]:
tensor([4.9930, 4.4945, 4.0021, 3.5013, 3.0005, 2.4986, 1.9997, 1.4998, 0.9990,
0.5001])
如您所见,当您从分布中对1,000,000个元素进行采样时,样本均值和标准差都接近您最初使用的原始mu
和sigma
。