下采样通过计算“分辨率”,即(总的#个点数)/(期望的样本数)来工作.然后使用范围变量保持外部计数和索引.然后它基本上查看每个点,并根据分辨率和计数/索引变量的当前状态决定是否将其包含在结果列表中.
这很好,但速度很慢,可能无法扩展.我想知道是否更好的例如返回所有的点并在ruby中进行下采样,或者可能有更好的方法.
解决方法 如果有人感兴趣,这就是我提出的解决方案.由于 mongodb的一些限制,我花了一段时间才弄明白,但它运行得很好,比我目前的map reduce解决方案快了10倍.这是聚合代码:
db.data.aggregate( {$match: {$and: [{graph_ID: gID},{"x.value": {$gt: start,$lt: stop}}]}},{$project: {x: 1,y: 1,serIEs: 1,chunk: {$subtract: [{$divIDe: ["$x.value",step]},{$mod: [{$divIDe: ["$x.value",1]}]}}},{$group: { _ID: { chunk: "$chunk",serIEs: "$serIEs" },serIEs: {$first: "$serIEs"},x: {$first: "$x"},y: {$first: "$y"},} },{$sort: {"x.value": 1}})
该解决方案会对数据进行分块.我想做类似int(x.value / step)的东西,但是mongodb没有整数数学运算符.所以我不得不用((x.value / step) – ((x.value / step)%1))来伪造它,它给出了除法的整数部分.
这很好用,可以让你做一些事情,比如平均块而不是只选择第一块,非常容易.
总结以上是内存溢出为你收集整理的ruby-on-rails – mongodb中的高效羽绒采样全部内容,希望文章能够帮你解决ruby-on-rails – mongodb中的高效羽绒采样所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)