Tôi đã cố gắng "song song hóa" chức năng rasterize
bằng cách sử dụng R
gói parallel
theo cách này:
- chia đối tượng SpatialPolygonsDataFrame thành
n
các phần
rasterize
mỗi phần riêng biệt
- hợp nhất tất cả các bộ phận vào một raster
Trong máy tính của tôi, rasterize
chức năng song song mất ít hơn 2,75 lần so với rasterize
chức năng không song song .
Lưu ý: mã bên dưới tải xuống một shapefile đa giác (~ 26,2 MB) từ web. Bạn có thể sử dụng bất kỳ đối tượng SpatialPolygonDataFrame. Đây chỉ là một ví dụ.
Tải thư viện và dữ liệu mẫu:
# Load libraries
library('raster')
library('rgdal')
# Load a SpatialPolygonsDataFrame example
# Load Brazil administrative level 2 shapefile
BRA_adm2 <- raster::getData(country = "BRA", level = 2)
# Convert NAMES level 2 to factor
BRA_adm2$NAME_2 <- as.factor(BRA_adm2$NAME_2)
# Plot BRA_adm2
plot(BRA_adm2)
box()
# Define RasterLayer object
r.raster <- raster()
# Define raster extent
extent(r.raster) <- extent(BRA_adm2)
# Define pixel size
res(r.raster) <- 0.1
Hình 1: Sơ đồ SpatialPolygonsDataFrame của Brazil
Ví dụ chủ đề đơn giản
# Simple thread -----------------------------------------------------------
# Rasterize
system.time(BRA_adm2.r <- rasterize(BRA_adm2, r.raster, 'NAME_2'))
Thời gian trong máy tính xách tay của tôi:
# Output:
# user system elapsed
# 23.883 0.010 23.891
Ví dụ chủ đề đa luồng
# Multithread -------------------------------------------------------------
# Load 'parallel' package for support Parallel computation in R
library('parallel')
# Calculate the number of cores
no_cores <- detectCores() - 1
# Number of polygons features in SPDF
features <- 1:nrow(BRA_adm2[,])
# Split features in n parts
n <- 50
parts <- split(features, cut(features, n))
# Initiate cluster (after loading all the necessary object to R environment: BRA_adm2, parts, r.raster, n)
cl <- makeCluster(no_cores, type = "FORK")
print(cl)
# Parallelize rasterize function
system.time(rParts <- parLapply(cl = cl, X = 1:n, fun = function(x) rasterize(BRA_adm2[parts[[x]],], r.raster, 'NAME_2')))
# Finish
stopCluster(cl)
# Merge all raster parts
rMerge <- do.call(merge, rParts)
# Plot raster
plot(rMerge)
Hình 2: Sơ đồ raster Brazil
Thời gian trong máy tính xách tay của tôi:
# Output:
# user system elapsed
# 0.203 0.033 8.688
Thông tin thêm về song song hóa trong R :