在Python中生成n维随机数

时间:2010-06-03 20:40:02

标签: python random n-dimensional

我正在尝试从高斯分布生成随机数。 Python有非常有用的random.gauss()方法,但这只是一维随机变量。我怎样才能以编程方式从n维度中的此分布生成随机数?

例如,在二维中,此方法的返回值基本上是与平均值的距离,因此我仍然需要(x,y)坐标来确定实际数据点。我想我可以生成两个以上的随机数,但我不确定如何设置约束。

我感谢任何见解。谢谢!

4 个答案:

答案 0 :(得分:5)

Numpy与随机模块中的函数具有多维等价物

您正在寻找的功能是numpy.random.normal

答案 1 :(得分:3)

您可以使用np.random.multivariate_normal()功能执行此操作。 它不仅适用于二维数据,也适用于任意数量的维度。

例如,如果您希望在点(1,3)周围有100个二维点,则可以执行以下操作。

mean = [1, 3]
cov = [[8, -5], [0.2, 0.2]]
x, y = np.random.multivariate_normal([0, 2], cov, 100).T

对于以点(1,10,100)为中心的100个三维点,你可以做到这一点。

mean = [1, 10, 100]
cov = [[1,1,1], [1,1,1], [1,1,1]]
x, y, z = np.random.multivariate_normal(mean, cov, 100).T

有关详细信息,请参阅文档,但您也可以问我。 http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.multivariate_normal.html

答案 2 :(得分:1)

您需要将多维分布正确地分解为一维分布的组合。例如,如果您想要一个距离给定中心的高斯分布距离点和围绕它的均匀分布角度的点,您将获得具有高斯rho和均匀θ的delta的极坐标(在0和2之间) pi),那么,如果你想要笛卡尔坐标,你当然可以进行坐标转换。

答案 3 :(得分:0)

听起来你要求Multivariate Normal Distribution。要从该分布生成值,您需要有一个协方差矩阵来说明x和y之间的关系。你的x和y如何相关?如果x和y是独立的,则可以使用random.gauss()生成两个值。

如果您不确定协方差矩阵是什么,那么在解决软件问题之前,您需要解决数学问题。如果您提供有关您正在尝试建模的更多信息,我们可能会提供帮助(我看到Alex Martelli刚刚发布了一些常见模型的解决方案)。

相关问题