我有一个大数据集(200万行),其中每行代表一个点,其空间坐标为米(x和y)及其分数。它看起来像这样:
my_points <- data.frame(ID = 1:2e6,
x = sample(x = 1:1e6, size = 2e6, replace = TRUE),
y = sample(x = 1:1e6, size = 2e6, replace = TRUE),
Score = sample(x = 1:1e3, size = 2e6, replace = TRUE))
head(my_points)
# ID x y Score
# 1 21984 628151 54
# 2 675714 27715 431
# 3 273248 127287 47
# 4 659750 795394 921
# 5 478142 417083 416
# 6 783249 440782 253
所有点都位于大面积(1000 x 1000公里)。
我试图在100米范围内找到收集最高分的点组。
到目前为止,我已经尝试了两种解决方案,但是没有一种能够处理如此多的数据(即使使用并行计算或data.table
包):
第一个解决方案:
我建立了一个覆盖所有空间的空间网格。我为网格选择了一小步(10米),以确保我收集所有可能的解决方案。对于网格的每个点,我将小于100米的点的得分相加。 这个解决方案花费了太多时间(可能是我的计算机上的几周或几个月)......
第二个解决方案
我已经建立了一个函数,对于一对(x,y),返回包含在中心圆(x,y)和半径100米内的分数。 我试图找到这个函数的最大值,但我无法找到适合这种非连续函数的方法...
有关更快解决方案的任何想法(不到一天)?
答案 0 :(得分:1)
好的 - 我认为我的解决方案有效,但速度很慢。
livereload:{
options:{
livereload:'<%= connect.options.livereload %>'
},
files:[
'app/{,*/}*.html',
'app/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
]
}
我使用Rcpp加速 - 算法非常简单。
1000点需要大约0.6秒。我想这意味着,你的2000000点需要一个月左右的时间。嗯。无论如何我决定发布这个帖子。也许它可以帮助别人。