【问题标题】:Uniformly distributed data in d dimensionsd维均匀分布的数据
【发布时间】:2011-12-05 17:54:10
【问题描述】:

如何在 Python 中生成均匀分布的 [-1,1]^d 数据?例如。 d 是一个类似 10 的维度。

我知道如何生成像 np.random.randn(N) 这样均匀分布的数据,但是维度的事情让我很困惑。

【问题讨论】:

  • randn 将返回正态分布的样本,而不是均匀分布。我的直觉是,对于多变量均匀分布,您可以使用 d 单变量均匀分布的乘积,但我不确定。
  • 这个问题不清楚;接受的答案似乎是均匀分布,但问题要求高斯/正态分布docs.scipy.org/doc/numpy/reference/generated/…

标签: python numpy machine-learning scipy


【解决方案1】:

假设各个坐标独立,那么下面会在[-1, 1)^d中生成一个随机点

np.random.random(d) * 2 - 1

以下将生成n 观察,其中每一行都是一个观察

np.random.random((n, d)) * 2 - 1

【讨论】:

  • 谢谢。得到了我所期望的。我需要 -5 到 5 范围内的 2d 样本。所以,我使用了 np.random.random((n,2)) * 10 - 5。
【解决方案2】:

正如已经指出的那样,randn 产生正态分布数(又名高斯数)。要获得均匀分布,您应该使用“uniform”。

如果您只需要一次采样 10 个均匀分布的数字,您可以使用:

import numpy as np
x = np.random.uniform(low=-1,high=1,size=10)

或者,如果您想一次生成很多(例如 100 个),那么您可以这样做:

import numpy as np
X = np.random.uniform(low=-1,high=1,size=(100,10))

现在 X[0], X[1], ... 每个长度都是 10。

【讨论】:

    【解决方案3】:

    您可以导入random 模块并调用random.random 以从[0, 1) 中获取随机样本。您可以将其加倍并减去 1 以从 [-1, 1) 中获取样本。

    以这种方式绘制 d 值,元组将从立方体 [-1, 1)^d 中统一绘制。

    【讨论】:

      【解决方案4】:

      没有 numpy:

      [random.choice([-1,1]) for _ in range(N)]
      

      可能有理由使用numpy的内部机制,或者手动使用random()等。但这些都是实现细节,也与随机数生成如何配给操作系统提供的熵位有关。

      【讨论】:

      • 嗯,我想我被某人否决了,因为 OP 没有明确说明他正在寻找 [-1,1]x[-1,1]x.. 形式的均匀分布。 .x[-1,1],不是 [-1,-1]^d 的值之间的均匀分布(即 {-1,1}^d)。由于我觉得 OP 的问题非常模糊(OP 认为他们想要的函数实际上是高斯函数时是统一的),并且语法不清楚,而且我的解释是合理的,所以我将其留在此处以防其他人觉得它有用。
      猜你喜欢
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2015-01-18
      • 2011-04-04
      • 1970-01-01
      相关资源
      最近更新 更多