random - 在矢量巨大且大多数权重为零的情况下有效使用 Octave 的 randsample(带权重)
问题描述
在即将到来的模拟项目中,我将遇到一种情况,即我必须从加权意义上的巨大向量中绘制一个随机元素。对于向量的大多数元素,分配的权重将为零。我也只需要绘制一个元素,因此替换或不替换功能无关紧要。
这个随机挑选步骤将成为我模拟的瓶颈,因此获得最佳效率和速度至关重要。
有什么技巧/提示最好做什么?在我的项目中是否有任何重要的节省?
PS: randsample 在大向量上可靠吗?
解决方案
查看randsample.m
统计包中的源代码。这实际上是一个非常简单的实现。它从权重向量创建归一化的累积权重向量,然后通过标准逆采样对其进行有效采样。
我不知道你所说的“巨大”是什么意思,但只要权重向量可以放入内存,就没有理由不应该很快。
如果“巨大”是指不适合内存的东西,那么您可以创建此函数的“巨大版本”,将累积权重向量拆分为保存在磁盘上的可预测“箱”,并且仅从右侧执行反向采样斌。
我唯一要补充的是,鉴于实现并且您只对单次抽奖感兴趣,那么如果您明确指定“替换”为“真”,您可能会受益于速度,因为默认值为“ false'(即没有替换),并且有替换的采样似乎避免了许多不必要且昂贵的步骤(排列等)。
推荐阅读
- android - Redmi 6 - 无法挂断电话
- maven - 无法从 apache camel 中的 sftp 下载文件,也没有打印失败日志
- owasp - owasp 在整个项目中对特定 CVE 条目的依赖项检查抑制
- java - 带注释的休息参数验证
- chart.js - 不正确的时间表Chart.js
- r - 检查一个数字是否在另外两个之间
- webstorm - WebStorm - 在花括号内缩进 JSX 元素
- datatable - 防止数据表崩溃
- java - 如果 String 包含大于 Integer.MAX_VALUE 的数字
- javascript - APIC 2018:如何在网关脚本中读取来自调用策略的 XML 响应