【问题标题】:Generate n-dimensional random numbers in Python在 Python 中生成 n 维随机数
【发布时间】:2010-06-03 20:40:01
【问题描述】:

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

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

我很欣赏任何见解。谢谢!

【问题讨论】:

    标签: python random n-dimensional


    【解决方案1】:

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

    你要找的函数是 numpy.random.normal

    【讨论】:

      【解决方案2】:

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

      例如,如果您希望有 100 个以点 (1,3) 为中心的二维点,您可以执行以下操作。

      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 个 3 维点,您可以这样做。

      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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 从数学上讲,这正是我所追求的目标,我认为可以通过假设每个维度之间完全独立来实现(如 Daniel Stutzbach 所述)。
        【解决方案4】:

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

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

        【讨论】:

        • 我的协方差矩阵本身可能是随机的,也可能只是 0,因为基本上我不在乎是否有独立性。我只是试图合成相对简单的数据点来测试我正在编写的聚类算法,在这种情况下,0 的协方差可能最容易测试。出于过于简单化的感觉,我摒弃了为每个维度生成随机正态分布数字的想法,但现在你提出来,似乎这样就可以了。谢谢!
        猜你喜欢
        • 1970-01-01
        • 2021-06-04
        • 2014-12-05
        • 2021-02-28
        • 1970-01-01
        • 2021-12-15
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多