Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加速光栅::使用r中的权重提取_R_Vector_Parallel Processing_Extract_Raster - Fatal编程技术网

加速光栅::使用r中的权重提取

加速光栅::使用r中的权重提取,r,vector,parallel-processing,extract,raster,R,Vector,Parallel Processing,Extract,Raster,我想从r中多边形定义的面积范围中提取光栅值的精确平均值。这可以使用graster::extract和weights=TRUE选项来实现。但是,使用大光栅时,此操作会变得非常缓慢,而且函数似乎没有并行化,因此begclulater()。。。endCluster()不会加快进程。 我需要提取一系列光栅的值,例如r、r10和r100。在r中有没有一种加速的方法,或者在GDAL中有没有另一种加速的方法 r <- raster(nrow=1000, ncol=1000, vals=sample(se

我想从r中多边形定义的面积范围中提取光栅值的精确平均值。这可以使用
graster::extract
weights=TRUE
选项来实现。但是,使用大光栅时,此操作会变得非常缓慢,而且函数似乎没有并行化,因此
begclulater()。。。endCluster()
不会加快进程。 我需要提取一系列光栅的值,例如r、r10和r100。在r中有没有一种加速的方法,或者在GDAL中有没有另一种加速的方法

r <- raster(nrow=1000, ncol=1000, vals=sample(seq(0,0.8,0.01),1000000,replace=TRUE))
r10 <- aggregate(r, fact=10)
r100 <- aggregate(r, fact=100)

v = Polygons(list(Polygon(cbind(c(-100,100,80,-120), c(-70,0,70,0)))), ID = "a")
v = SpatialPolygons(list(v))

plot(r)
plot(r10)
plot(r100)
plot(v, add=T)

system.time({
precise.mean <- raster::extract(r100, v, method="simple",weights=T, normalizeWeights=T, fun=mean)    
})
user  system elapsed 
0.251   0.000   0.253 
> precise.mean
      [,1]
[1,] 0.3994278    


system.time({
  precise.mean <- raster::extract(r10, v, method="simple",weights=T, normalizeWeights=T, fun=mean)    
})

user  system elapsed 
7.447   0.000   7.446 

precise.mean
      [,1]
[1,] 0.3995429

r如果您首先调用
beginluster
(然后该函数处理并行化),它实际上应该运行得更快。更好的办法是使用2.7-14版,它的实现速度要快得多。CRAN目前正在对其进行审查,但您也可以在这里找到它:

最后,我使用直接在硬盘上工作的
gdalUtils解决了这个问题

我使用命令
gdalwarp()
将光栅分辨率降低到R10100。 然后
gdalwarp()
将结果光栅的分辨率提高到原始分辨率r。 然后
gdalwarp()
使用
cutline=“v.shp”,将光栅裁剪到切线=T
以将光栅遮罩到矢量
v
。 然后
gdalinfo()
结合
子集(x(grep(“Mean=,x))
提取平均值。 所有这些都打包在
foreach()%dopar%
循环中,以处理大量光栅和分辨率


虽然它很复杂,可能不如
extract::graster
精确,但它完成了这项工作

谢谢。我已经试过了。它检测到8个核并提供了7个可用核,但只使用了1个节点(由系统监视器确认)。它对每个多边形使用一个节点,我想您只有一个多边形。是的,我只有一个多边形。