生成随机数的归一化矩阵,其中的行是从不同的高斯(正态)分布生成的
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 之间数字的限制的好可能性,也没有找到从不同正态分布生成数字的方法。
考虑到您已经有 sigma
和 mu
(指出哪一行将使用哪个分布):
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)
当然,根据 sigma
和 mu
的值,您不会得到值的高斯分布。
我正在尝试在 python 中编写一个生成器,它使用高斯(正态)分布生成一个 N*M 随机数矩阵。
给出的是 N 和 M 以及高斯随机场的数量(正态分布)。矩阵中的数字也应介于 0 和 1 之间。 例如,一个由 0 到 1 之间的浮点数组成的 100 * 80 矩阵,它是由 5 种不同的高斯分布生成的。这些分布的均值和方差可以任意选择。哪个分布生成哪些行和多少行也是任意的。重要的是一行中的数字是在相同的正态分布中生成的。 (或者更确切地说,每一行是一个存在于特定多元高斯分布中的点)
我已经试过了scipy.stats.truncnorm
。在这里我不知道如何通过不同的分布生成行,num.random.multivariate_normal
太复杂了,难以理解。我一直在寻找很长时间,但既没有找到通过 0 和 1 之间数字的限制的好可能性,也没有找到从不同正态分布生成数字的方法。
考虑到您已经有 sigma
和 mu
(指出哪一行将使用哪个分布):
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)
当然,根据 sigma
和 mu
的值,您不会得到值的高斯分布。