我遇到了一个大问题。
我有一个大型栅格(行= 180,列= 480,单元格数= 86400) 起初我把它二进制化(这样只有1&0;和0' s)然后我标记了簇。(单元格为1并相互连接得到相同的标签。)
现在我需要计算单元格之间的所有距离,即非0。 安静很多,这是我的大问题。 我这样做是为了得到我感兴趣的细胞的坐标(得到细胞的位置(即细胞数),不是0):
V=getValues(label)
Vu=c(1:max(V))
pos=which(V %in% Vu)
XY=xyFromCell(label,pos)
这非常有效。所以XY是一个矩阵,它包含所有坐标(不是0的单元格)。但现在我挣扎了。我需要计算所有这些坐标之间的距离。然后我必须把它们中的每一个放在43个距离之一。它有点像这样(只是一个例子):
0<x<0.2 bin 1
0.2<x<0.4 bin2
当我使用它时:
pD=pointDistance(XY,lonlat=FALSE)
R说它无法分配这种大小的矢量。它变得太大了。 然后我想我可以这样做(创建一个空的数据框df或类似的东西,让函数pointDistance运行在XY的每个单独的值上):
for (i in 1:nrow(XY))
{pD=PointDistance(XY,XY[i,],lonlat=FALSE)
pDbin=as.matrix(table(cut(pD,breaks=seq(0,8.6,by=0.2),Labels=1:43)))
df=cbind(df,pDbin)
df=apply(df,1,FUN=function(x) sum(x))}
当我尝试使用例如XY的前50个值。 但是当我将它用于整个XY矩阵时,它花费了太多时间。(有时这个XY矩阵包含10000个xy坐标) 有没有人知道如何更快地做到这一点?
答案 0 :(得分:0)
我不知道这是否会有效。我建议你试试这个:
假设您在每个单元格中都有dataframe
,其值为0
或1
。要查找坐标,您只需编写以下代码:
cord_matrix <- which(dataframe == 1, arr.ind = TRUE)
现在,您将获得带有row
索引和column
索引的坐标矩阵。
要查找欧氏距离,请使用dist()
函数。通过它。它看起来像这样:
dist_vector <- dist(cord_matrix)
它将返回下三角矩阵。可以转换为矢量/对称矩阵。现在你所要做的就是根据你的要求计算垃圾箱。
让我知道这是否适用于特定的内存空间。