用 python 进行拉丁超立方体采样

新手上路,请多包涵

我想对一个函数在多个维度 (2,3,4) 中定义的分布进行采样:

 f(x, y, ...) = ...

分布可能是丑陋的、非标准的(比如数据的 3D 样条、高斯总和等)。为此,我想对 2..4 维空间进行统一采样,而不是用一个额外的随机数接受或拒绝空间的给定点到我的样本中。

  1. 是否有为此目的准备使用 python 库?

  2. 是否有 python 库用于使用拉丁超立方体采样或其他统一采样方法在这个 2..4 维空间中生成点?使用独立随机数的蛮力抽样通常会导致空间的密度越来越大或越来越小。

  3. 如果 1) 和 2) 不存在,是否有人愿意分享他对相同或相似问题的实现。

我将在 python 代码中使用它,但也承认指向其他解决方案的链接。

原文由 user2393987 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
1 个回答

我想这是一个迟到的答案,但这也是为未来的访客准备的。我刚刚在 git 上 实现了多维统一拉丁超立方体采样。它很小,但非常易于使用。如果您的变量是独立的,则可以使用拉丁超立方体采样生成在 n 维采样的均匀随机变量。下面是一个示例图,在零相关的二维中比较了蒙特卡罗和拉丁超立方体采样与多维均匀性 (LHS-MDU)。

 import lhsmdu
import matplotlib.pyplot as plt
import numpy

l = lhsmdu.sample(2,10) # Latin Hypercube Sampling of two variables, and 10 samples each.
k = lhsmdu.createRandomStandardUniformMatrix(2,10) # Monte Carlo Sampling

fig = plt.figure()
ax = fig.gca()
ax.set_xticks(numpy.arange(0,1,0.1))
ax.set_yticks(numpy.arange(0,1,0.1))
plt.scatter(k[0], k[1], color="b", label="LHS-MDU")
plt.scatter(l[0], l[1], color="r", label="MC")
plt.grid()
plt.show()

MCS 与 LHS

原文由 Sahil M 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题