当前位置: 首页 > 面试题库 >

快速任意分布随机采样(逆变换采样)

夏侯博
2023-03-14
问题内容

random模块(http://docs.python.org/2/library/random.html)具有几个
固定 功能,可以从中随机采样。例如,random.gauss将从具有给定均值和sigma值的正态分布中采样随机点。

我正在寻找一种方法,该方法可以N使用自己的分布 尽可能快地 在给定间隔内提取一定数量的随机样本python。这就是我的意思:

def my_dist(x):
    # Some distribution, assume c1,c2,c3 and c4 are known.
    f = c1*exp(-((x-c2)**c3)/c4)
    return f

# Draw N random samples from my distribution between given limits a,b.
N = 1000
N_rand_samples = ran_func_sample(my_dist, a, b, N)

这里ran_func_sample是我后和a, b是从中可以得出样本的限制。有这样的东西python吗?


问题答案:

您需要使用 逆变换采样 方法来获取根据所需定律分布的随机值。使用这种方法,您可以将 反函数 应用于区间[0,1]中具有标准均匀分布的随机数。

找到反函数后,您将以明显的方式根据所需的分布获得1000个数字:

[inverted_function(random.random()) for x in range(1000)]

有关 逆变换采样的 更多信息:

  • http://en.wikipedia.org/wiki/Inverse_transform_sampling


 类似资料:
  • 其中是我想要的,而是绘制示例的限制。在中有类似的内容吗?

  • 根据RandomizedSearchCV文件(重点是mine): param_distributions:字典或字典列表 使用参数名称 (str) 作为键的字典,以及要尝试的分布或参数列表。分布必须提供 rvs 方法进行采样(例如来自 scipy.stats.分布的方法)。如果给出了一个列表,则对其进行统一采样。如果给出了字典列表,则首先对字典进行统一采样,然后如上所述使用该字典对参数进行采样。

  • Reference 关于乱序(shuffle)与随机采样(sample)的一点探究 - xybaby - 博客园 洗牌算法 Fisher–Yates shuffle - Wikipedia Knuth-Durstenfeld Shuffle(Fisher–Yates Shuffle 改进版) Knuth-Durstenfeld Shuffle 是一个“原地”(in-place)算法 伪代码 To

  • 问题内容: 在不从javascript中的数组进行替换的情况下,获取随机样本的一种干净方法是什么?所以假设有一个数组 我想随机采样5个唯一值;例如,生成一个长度为5的随机子集。要生成一个随机样本,可以执行以下操作: 但是,如果多次执行此操作,则可能会多次捕获同一项。 问题答案: 我建议使用Fisher-Yates混洗混洗数组的副本并进行切片: 请注意,这不是获取大型数组的随机小子集的最有效方法,因

  • 在分布式跟踪中,数据量可能非常高,因此采样可能很重要(您通常不需要导出所有spans以获得正在发生的情况)。Spring Cloud Sleuth具有Sampler策略,您可以实现该策略来控制采样算法。采样器不会停止生成跨度(相关)ids,但是它们确实阻止了附加和导出的标签和事件。默认情况下,您将获得一个策略,如果跨度已经处于活动状态,则会继续跟踪,但新策略始终被标记为不可导出。如果您的所有应用程

  • 问题内容: 如何在numpy中以[a,b]间隔采样随机浮点数?不仅是整数,而且是任何实数。例如, 将在之间返回随机数。谢谢。 问题答案: 该均匀分布可能会做你的要求。