首页 > 解决方案 > 在矢量巨大且大多数权重为零的情况下有效使用 Octave 的 randsample(带权重)

问题描述

在即将到来的模拟项目中,我将遇到一种情况,即我必须从加权意义上的巨大向量中绘制一个随机元素。对于向量的大多数元素,分配的权重将为零。我也只需要绘制一个元素,因此替换或不替换功能无关紧要。

这个随机挑选步骤将成为我模拟的瓶颈,因此获得最佳效率和速度至关重要。

有什么技巧/提示最好做什么?在我的项目中是否有任何重要的节省?

PS: randsample 在大向量上可靠吗?

标签: randomoctave

解决方案


查看randsample.m统计包中的源代码。这实际上是一个非常简单的实现。它从权重向量创建归一化的累积权重向量,然后通过标准逆采样对其进行有效采样。

我不知道你所说的“巨大”是什么意思,但只要权重向量可以放入内存,就没有理由不应该很快。

如果“巨大”是指不适合内存的东西,那么您可以创建此函数的“巨大版本”,将累积权重向量拆分为保存在磁盘上的可预测“箱”,并且仅从右侧执行反向采样斌。

我唯一要补充的是,鉴于实现并且您只对单次抽奖感兴趣,那么如果您明确指定“替换”为“真”,您可能会受益于速度,因为默认值为“ false'(即没有替换),并且替换的采样似乎避免了许多不必要且昂贵的步骤(排列等)。


推荐阅读