我有两个矩阵,一个是200K行,另一个是20K.对于第一个矩阵中的每一行(也就是一个点),我试图找到第二个矩阵中哪一行(也是一个点)最接近第一个矩阵中的点.这是我在样本数据集上尝试的第一种方法:
#Test dataset
pixels.latlon=cbind(runif(200000,min=-180, max=-120), runif(200000, min=50, max=85))
grwl.latlon=cbind(runif(20000,min=-180, max=-120), runif(20000, min=50, max=85))
#calculate the distance matrix
library(geosphere)
dist.matrix=distm(pixels.latlon, grwl.latlon, fun=distHaversine)
#Pick out the indices of the minimum distance
rnum=apply(dist.matrix, 1, which.min)
Run Code Online (Sandbox Code Playgroud)
但是,Error: cannot allocate vector of size 30.1 Gb当我使用该distm功能时出现错误.
关于这个主题有几个帖子:
这个bigmemory用于计算SAME数据帧中各点之间的距离,但我不确定如何调整它来计算两个不同矩阵中点之间的距离... https://stevemosher.wordpress.com/2012/04/12 /缺口司托克斯-距离代码现在与-大存储器/
这个也适用于计算SAME矩阵中各点之间的距离矩阵... 用于重复距离矩阵计算的高效(记忆方式)函数和超大距离矩阵的分块
这个与我想做的几乎完全相同,但他们实际上没有提出适用于大数据的解决方案:R:使用大内存的distm我试过这个方法,它使用bigmemory但是得到Error in CreateFileBackedBigMatrix(as.character(backingfile), as.character(backingpath), :
Problem creating filebacked matrix.错误,我认为因为数据帧太大了.
有没有人想出这个问题的好方法?我对其他包装的想法持开放态度!
pixels.latlon=cbind(runif(200000,min=-180, max=-120), runif(200000, min=50, max=85))
grwl.tibble = tibble(long=runif(20000,min=-180, max=-120), lat=runif(20000, min=50, …Run Code Online (Sandbox Code Playgroud)