生成随机数的归一化矩阵,其中的行是从不同的高斯(正态)分布生成的

Generating a normalized matrix of random numbers which rows are generated from different Gaussian (normal) distributions

我正在尝试在 python 中编写一个生成器,它使用高斯(正态)分布生成一个 N*M 随机数矩阵。

给出的是 N 和 M 以及高斯随机场的数量(正态分布)。矩阵中的数字也应介于 0 和 1 之间。 例如,一个由 0 到 1 之间的浮点数组成的 100 * 80 矩阵,它是由 5 种不同的高斯分布生成的。这些分布的均值和方差可以任意选择。哪个分布生成哪些行和多少行也是任意的。重要的是一行中的数字是在相同的正态分布中生成的。 (或者更确切地说,每一行是一个存在于特定多元高斯分布中的点)

我已经试过了scipy.stats.truncnorm。在这里我不知道如何通过不同的分布生成行,num.random.multivariate_normal 太复杂了,难以理解。我一直在寻找很长时间,但既没有找到通过 0 和 1 之间数字的限制的好可能性,也没有找到从不同正态分布生成数字的方法。

考虑到您已经有 sigmamu(指出哪一行将使用哪个分布):

sigma = np.array((1, 2, 3))
mu = np.array((-1, -2, -3))

只需构建生成的分布(3 rows/different 个分布,这里有 10 列):

samples = np.random.standard_normal((3, 10)) * sigma[:, None] + mu[:, None]

请注意,高斯分布是无界的,因此您必须裁剪:

samples = np.clip(samples, 0, 1)

当然,根据 sigmamu 的值,您不会得到值的高斯分布。