আর এর সাহায্যে ভেক্টরটিকে দ্রুত রাস্টার থেকে প্রসেসিং করা হচ্ছে


9

আমি ভেক্টরকে রাস্টারে রাস্টার হিসাবে রূপান্তর করছি However তবে প্রক্রিয়াটি খুব দীর্ঘ ছিল। আরও দ্রুত করার জন্য স্ক্রিপ্টটি মাল্টিথ্রেড বা জিপিইউ প্রসেসিংয়ে রাখার কি সম্ভাবনা আছে?

রাস্টারাইজড ভেক্টরের কাছে আমার স্ক্রিপ্ট।

r.raster = raster()
extent(r.raster) = extent(setor) #definindo o extent do raster
res(r.raster) = 10 #definindo o tamanho do pixel
setor.r = rasterize(setor, r.raster, 'dens_imov')

r.raster

শ্রেণি: রাস্টারলেয়ের মাত্রা: 9636, 11476, 110582736 (নরো, এনসিওল, এনসেল) রেজোলিউশন: 10, 10 (এক্স, ওয়াই) পরিমাণ: 505755, 620515, 8555432, 8651792 (এক্সমিন, এক্সম্যাক্স, ইয়ামিন, ইয়াম্যাক্স) সমন্বিত। সুত্র। : + প্রোজ = লংল্যাট + ড্যাটাম = ডাব্লু জিএস ৮৮ + এলপ্স = ডাব্লু জিএস ৮৮ + টাগস ৮৪ = ০,০,০

setor

শ্রেণি: স্থানিক পলিগোনস ডেটা ফ্রেমের বৈশিষ্ট্য: 5419 পরিধি: 505755, 620515.4, 8555429, 8651792 (এক্সমিন, এক্সম্যাক্স, ইয়ামিন, ইয়াম্যাক্স) সমন্বিত coord সুত্র। : + প্রোজ = উটম + জোন = 24 + দক্ষিণ + এল্পস = জিআরএস 80 + ইউনিট = মি + নো_ডিফস ভেরিয়েবল: 6 নাম: আইডি, সিডি_জিওসিডিআই, টিপো, ডেনসিমোভ, এলাকা_মি, ডমিসিলিয়াস 1 মিনিট মান: 35464, 290110605000001, রুড়াল, 0.00000003,100004, 1.0000 সর্বোচ্চ মান: 58468, 293320820000042, ইউআরবানো, 0.54581673,99996, 99.0000

সেটার মুদ্রণ এখানে চিত্র বর্ণনা লিখুন


আপনি কি সেটার এবং r.raster এর সারাংশ পোস্ট করতে পারেন? আমি সেটারে বস্তুর সংখ্যা এবং r.raster এর মাত্রা সম্পর্কে কিছু ধারণা পেতে চাই। তাদের মুদ্রণ ঠিক আছে
mdsumner

আমি প্রশ্নের মূল অংশে সংক্ষিপ্তসার রাখি।
ডিয়াগো ক্যারিব é

সংক্ষিপ্তসার নয়, কেবল মুদ্রণ করুন - যে তথ্য আমি আমাদের জন্য বলেছিলাম তা টেগার নয়
এমডসুমনার

দুঃখিত, আমি মুদ্রণ করা।
ডিয়াগো ক্যারিব

আহ, হতাশ আমি প্রিন্ট আউট না হওয়া পর্যন্ত আমি এটির কথা ভাবিনি - নিশ্চিত করে নিন যে রাস্টারটির প্রজেকশন বহুভুজগুলির সাথে মেলে, এটি এই মুহুর্তে নয় - চেষ্টা করুন <<- রাস্টার (সেটোর); res (r) <- 10; setor.r = rasterize (setor, r, 'dens_imov') - তবে আবার চেষ্টা করুন, রেজ (আর) <- 250 কে প্রথমে সেট করুন যাতে আপনি উচ্চ-
রেজাল্ট

উত্তর:


17

আমি এইভাবে প্যাকেজটি ব্যবহার করে ফাংশনটিকে "সমান্তরাল" করার চেষ্টা করেছি :rasterizeRparallel

  1. স্পটিয়ালপলিজোনস ডেটা ফ্রেম অবজেক্টটিকে nঅংশে বিভক্ত করুন
  2. rasterize প্রতিটি অংশ পৃথকভাবে
  3. সমস্ত অংশগুলিকে একটি রাস্টারে মিশ্রিত করুন

আমার কম্পিউটারে, সমান্তরাল rasterizeফাংশনটি -সমান্তরাল rasterizeফাংশনের চেয়ে 2.75 গুণ কম সময় নিয়েছে ।

দ্রষ্টব্য: নীচের কোডগুলি ওয়েব থেকে একটি বহুভুজ শেফফাইল (~ 26.2 এমবি) ডাউনলোড করে। আপনি যে কোনও স্প্যাটিয়ালপলিজোনডাটা ফ্রেম অবজেক্টটি ব্যবহার করতে পারেন। এটি শুধুমাত্র একটি উদাহরণ।

লাইব্রেরি এবং উদাহরণ ডেটা লোড করুন:

# 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

BrazilSPDF

চিত্র 1: ব্রাজিল স্পটিয়ালপলিজোনস ডেটা ফ্রেম প্লট

সহজ থ্রেড উদাহরণ

# Simple thread -----------------------------------------------------------

# Rasterize
system.time(BRA_adm2.r <- rasterize(BRA_adm2, r.raster, 'NAME_2'))

আমার ল্যাপটপের সময়:

# Output:
# user  system elapsed 
# 23.883    0.010   23.891

মাল্টিথ্রেড থ্রেডের উদাহরণ

# 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)

BrazilRaster

চিত্র 2: ব্রাজিল রাস্টার প্লট

আমার ল্যাপটপের সময়:

# Output:
# user  system elapsed 
# 0.203   0.033   8.688 

আর এর মধ্যে সমান্তরালতা সম্পর্কে আরও তথ্য :


খুব ভাল উত্তর!
ডায়োগো ক্যারিব

আপনি কি কেবল মেশিনে কোরের সংখ্যা হিসাবে এন সেট করেন না?
স্যাম

@ সাম আমার মনে হয় এটি সমস্যা ছাড়াই কাজ করা উচিত তবে আমি জানি না এটি ভাল কি না! আমি অনুমান যে যদি আমি ফাটানো বৈশিষ্ট্য মধ্যে এন অংশে সমান কোরের সংখ্যা হয়তো এই অংশ এক প্রক্রিয়া এবং কোর যে প্রক্রিয়া এটা ব্যবহার না করে হতে পারে করা আরো সহজ হতে পারে! যাইহোক, আপনার যদি কোরগুলির চেয়ে বেশি অংশ থাকে তবে যখন একটি কোর সমাপ্তির এক অংশ প্রক্রিয়াকরণ হয় তবে এটি অন্য অংশটি গ্রহণ করবে। তবে অবশ্যই আমি নিশ্চিত নই! এই ইস্যুতে যে কোনও সহায়তা প্রশংসিত হবে।
গুজম্যান

আমি আজ রাতে কিছু পরীক্ষা চালাচ্ছি। একটি ছোট আকারের শেফফায়ালে (প্রায় 25km বাই 25km), 50 মিলিয়ন হয়ে গেছে, এন = 20, 30 বা 50 এর বিপরীতে এন = 2,4 বা 8 ব্যবহারের ক্ষেত্রে একটি ছোট্ট উন্নতি হয়েছে ton এবং 25 মিটারে রাস্টারাইজ করুন। সিঙ্গল কোর প্রসেসিং 10 ঘন্টা তাই আমরা দেখতে পাব যে এন এর বিভিন্ন মান কী করে !! (n = 50 সবেমাত্র 1 ঘন্টাের নীচে)
স্যাম

@ গুজমন আমি আবার কোড চালাচ্ছি। তবে এটি কিছু ত্রুটি পুনরুদ্ধার করেছে এবং কেন তা জানেনা know আপনি কি আমাকে সাহায্য করতে পারেন? চেকফোর্ডে ত্রুটিRemoteErferences (ভাল): 7 টি নোড ত্রুটি তৈরি করেছে; প্রথম ত্রুটি: অবজেক্ট 'বিআরএ_এডিএম 2' পাওয়া যায় নি
ডায়োগো ক্যারিবি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.