আরকজিআইএস স্পেসিয়াল অ্যানালিস্ট ব্যবহার করে রেস্টারদের সেট করার জন্য একটানা পিক্সেল মান গণনা করা হচ্ছে?


23

আমি স্পেসিয়াল অ্যানালিস্টের সাথে আরকজিআইএস 10 ব্যবহার করছি।

আমার কাছে রাস্টারগুলির একটি সেট রয়েছে (মোট 8 টি) যা প্রতিটিতে প্রতিটি ঘরে 1 বা 0 থাকে। প্রতিটি রাস্টার বিভিন্ন বছরের মূল্যবান ডেটা উপস্থাপন করে। যুক্তি জন্য বছর 1 থেকে বছর 8।

আমি সমস্ত রেস্টারগুলিকে একসাথে যুক্ত করতে পারি যা আমাকে 0 থেকে 8 এর মান সহ একটি চূড়ান্ত গ্রিড দেবে যা একটি 8 ইঙ্গিত করে যে সেলটি রেস্টারদের সেট (সমস্ত বছর) এর জন্য নিয়মিত 1 ছিল।

আমি প্রতিটি কক্ষের জন্য 1 এর দীর্ঘতম ধারাবাহিক সংখ্যাটি খুঁজতে চাই।

সুতরাং উদাহরণস্বরূপ, মোট গ্রিড একক কোষের জন্য 5 বলার মান রেকর্ড করতে পারে তবে 8 টি গ্রিডের উপরে যে সেলটি একের পরপর 1 টির সমান 3 হয় বা এটি প্রকাশ করার অন্য কোনও উপায় 3 বছরের জন্য যে সেলটি 1 তারপরে এটি শূন্য এবং একের মধ্যে দোলা দেওয়া শুরু করে।

আমার রাস্টার প্রসেসিং দক্ষতা আমার ভেক্টর প্রসেসিং দক্ষতার মতো গরম নয় এবং আমি ইএসআরআই সহায়তা ফাইলটি দেখেছি তবে শেলফ জিও-প্রসেসিং সরঞ্জামগুলি ব্যবহার করে কেউ কীভাবে এটি অর্জন করবে তা আমি বুঝতে পারি না?

কোন ধারনা?


1
এটি আসলে একটি দুর্দান্ত শীতল বিশ্লেষণ। যথারীতি, আপনি যা করার চেষ্টা করছেন তা করার একাধিক উপায় রয়েছে। আমি মনে করি যদিও আপনাকে সমস্ত সংমিশ্রণের মধ্য দিয়ে লুপ করতে কিছু প্রোগ্রামিং করতে হবে।
এম লওরি

1
একটি সাধারণ মন্তব্য (@ এমএলউইরির দ্বারা এই মন্তব্যটি দ্বারা অনুপ্রাণিত): যখনই প্রশ্নগুলি আকর্ষণীয় দেখায় বা স্পষ্টভাবে বর্ণিত হয় তবে দয়া করে প্রশ্নগুলিকে উজ্জীবিত করুন । ভাল প্রশ্নগুলি আমাদের সাইটে সমস্ত কিছু চালিত করে; যারা জিজ্ঞাসা করে তাদের পুরস্কৃত করার জন্য দয়া করে আমরা যা করতে পারি!
whuber

উত্তর:


14

এটি একটি স্থানীয় অপারেশন বলে, আসুন একক কোষের জন্য এটি কীভাবে করা যায় তা নিয়ে কাজ করা যাক: মানচিত্র বীজগণিত বাকিটির যত্ন নেবে।

প্রথম দয়া করে মনে রাখবেন অর্ডার rasters এর স্পষ্টত গুরুত্বপূর্ণ। সুতরাং একক শট সেল পরিসংখ্যান যেমন একটি সেল যোগফল এটি করবে না।

আমরা যদি কোনও নির্দিষ্ট ঘরে যেমন 01110101 এর মতো ক্রমিকের মুখোমুখি হই তবে আমরা এটিকে শুরু থেকে শেষ পর্যন্ত প্রক্রিয়া করব এবং

  1. শূন্য একটি গণনা দিয়ে শুরু করুন।

  2. প্রতিবার আমরা যখন 1 এর মুখোমুখি হই তখন গণনা বৃদ্ধি করুন।

  3. সর্বশেষ গণনাটি সংরক্ষণের পরে প্রতিবার আমরা 0 এর মুখোমুখি হলে গণনা পুনরায় সেট করুন ।

  4. শেষে, সর্বাধিক সংরক্ষিত গণনা নিন (চূড়ান্ত গণনা সহ)।

ধাপ 1 ধ্রুব শূন্য গ্রিডের সাথে প্রয়োগ করা হয়। 2 এবং 3 পদক্ষেপগুলি আমাদের মুখোমুখি হওয়ার উপর নির্ভর করে: এটি তাই শর্তসাপেক্ষ অপারেশন। চতুর্থ ধাপটি স্পষ্টভাবে স্থানীয় সর্বাধিক। আমরা এটির পরে আরও কিছু আনুষ্ঠানিকভাবে কোড করব:

count = 0
result = 0
For each value:
    If (value==1):
        count=count+1
    else
        result = max(result, count)
        count=0
result = max(result, count)

যখন আপনার অনেক গ্রিড থাকে তখন পাইথন স্ক্রিপ্টটি দিয়ে এটি সর্বোত্তমভাবে করা হয়েছে তবে আটটি দিয়ে লুপটি আনরোল করা এবং হাত দিয়ে পদক্ষেপগুলি লেখার পক্ষে কঠোর নয় not এটি একটি সামান্য সমস্যা প্রকাশ করে: result=max(longest,count)রাস্টার অপারেশনগুলির সাথে কোড করা শক্ত "পার্শ্ব-প্রতিক্রিয়া" এর ধরণ। (তবে এটি করা যেতে পারে, যেমন নীচের দ্বিতীয় সমাধানে দেখানো হয়েছে)) এটিও অদক্ষ, কারণ এটি প্রতিটি পদক্ষেপে একটি অতিরিক্ত গণনা যুক্ত করে। maxশেষ পর্যন্ত অপারেশন বন্ধ রাখার লক্ষ্যে আমরা অতএব অল্প কিছুটা পরিবর্তন করেছি । এর জন্য প্রতিটি পর্যায়ে পৃথক গণনা সংরক্ষণ করা প্রয়োজন ।

এই প্রক্রিয়াটি অতিক্রম করে আমি প্রথম ধাপের একটি শর্টকাটও পেয়েছি। এটি নিম্নলিখিত সমাধানের দিকে নিয়ে যায় যা সামান্য দীর্ঘ এবং র‌্যাম-নিবিড় হলেও এটি সহজ এবং দ্রুত সম্পাদিত পদক্ষেপগুলি অন্তর্ভুক্ত করে:

result1 = "grid1"
result2 = con("grid2"==1, "result1"+1, 0)
result3 = con("grid3"==1, "result2"+1, 0)
result4 = con("grid4"==1, "result3"+1, 0)
result5 = con("grid5"==1, "result4"+1, 0)
result6 = con("grid6"==1, "result5"+1, 0)
result7 = con("grid7"==1, "result6"+1, 0)
result8 = con("grid8"==1, "result7"+1, 0)
CellStatistics(["result1", "result2", "result3", "result4", "result5", "result6", "result7" "result8"], "max")

আসক সিনট্যাক্সটি আপনার আরক্যাপের সংস্করণে পরিবর্তিত হয়। (উদাহরণস্বরূপ, CellStatisticsসংস্করণ 10 এ নতুন, আমি বিশ্বাস করি, তবে স্থানীয় সর্বাধিক ক্রিয়াকলাপ সর্বদা উপলব্ধ been

ইনপুট 01110101 সহ উদাহরণস্বরূপ, "ফলাফল *" গ্রিডগুলির ক্রমটিতে 0, 1, 2, 3, 0, 1, 0, 1 এর মান থাকবে, সুতরাং শেষে CellStatistics3 টি ফিরে আসবে, এর দীর্ঘতম স্ট্রিংয়ের দৈর্ঘ্য 1 এর।

যদি র‌্যাম দুষ্প্রাপ্য হয় তবে কার্যনির্বাহী সময়কে প্রায় দ্বিগুণ করে ব্যয় করে মধ্যবর্তী ফলাফলগুলি পুনরায় ব্যবহার করতে সমাধানটি সংশোধন করা যেতে পারে:

result = "grid1"
temp = con("grid2"==1, "result"+1, 0)
result = CellStatistics[["temp", "result"], "max"]
temp = con("grid3"==1, "temp"+1, 0)
result = CellStatistics[["temp", "result"], "max"]
...
temp = con("grid8"==1, "temp"+1, 0)
CellStatistics[["temp", "result"], "max"]

ইনপুট 01110101 সহ উদাহরণস্বরূপ, ("অস্থায়ী", "ফলাফল") মানগুলি প্রথম লাইনের পরে (NoData, 0) হবে এবং প্রতিটি জোড় ("কন", "সেলস্ট্যাটিস্টিক্স") ক্রিয়াকলাপের পরে মানগুলি হবে (1 , 1), (2, 2), (3, 3), (0, 3), (1, 3), (0, 3), (1, 3) আবার চূড়ান্ত মান 3।

উভয় সমাধানে মানচিত্র বীজগণিতের এক্সপ্রেশনগুলির নিয়মিত প্যাটার্নটি নির্দেশ করে যে কীভাবে কোনও লিপিটিতে লুপ হিসাবে অ্যালগরিদম কোড করা যায় এবং প্রতিটি পুনরাবৃত্তির সাথে সূচি পরিবর্তন করে।


টাইপ কোড ব্লকে একটি টাইপও থাকতে পারে: গণনা = গণনা = 1 সম্ভবত গণনা = গণনা + 1 হতে হবে
এমওউভারি

1
@ এমএল ধন্যবাদ (ভাল চোখ!): এটি এখন ঠিক করা হয়েছে। সিউডোকোড একেবারে সঠিক করা শক্ত; মানব পর্যালোচনা ত্রুটি সন্ধানের একটি আসল সম্পদ is এছাড়াও, যদিও আমি আর্কজিআইএসে সমাধানগুলি পরীক্ষা করে নিই না, আমি আর প্রথম সমাধানটি বাস্তবায়িত করেছি, তাই আমার কাছে কিছুটা আশ্বাস রয়েছে যে পদ্ধতির সঠিক।
whuber

1
"whuber" আবার আপনি জানেন যে মানুষ! আপনি যদি কোন বাসে চলাচল করেন তবে Godশ্বর আমাদের বাকী সবাইকে সাহায্য করুন! আপনার পাইথনের প্রাথমিক দিকটি আমি যে দিকটি ভাবছিলাম তা ছিল তবে আমি জানি রাস্টারদের সাথে প্রায়শই এতটুকু চটজলদি যা আপনি প্রমাণ করেছেন সেগুলি করতে পারে। আপনি যদি নিজেকে ব্রিটেনে সন্ধান করেন তবে আমাদের সেরা ঘরের তাপমাত্রার ফ্ল্যাট বিয়ারের একটি পিন্ট কিনে দেওয়া আপনার জন্য সম্মানের বিষয়! :)
হর্নবিড্ড

ধন্যবাদ, ডানকান: তবে অ্যান্ডি হারফুটের দুর্দান্ত সমাধানটি দেখুন!
whuber

14

এই সম্পর্কে কেবল চ্যাট করে এবং ভাবছেন যে আপনি ইনপুট গ্রিডগুলি বাইনারি স্ট্রিম হিসাবে বিবেচনা করে সমস্যার কাছে আসতে পারেন কিনা। এটি আপনাকে তাদের একত্রিত করার জন্য ক্রমটির জন্য একটি অনন্য সংক্ষিপ্ত পূর্ণসংখ্যা - যেমন 01110101 = 117 প্রদান করবে This এই মানটি পরপর 1s সর্বাধিক সংখ্যা দিতে পুনরায় শ্রেণিবদ্ধ করা যেতে পারে।

এখানে আটটি গ্রিড একত্রিত করার একটি উপায় দেখানোর উদাহরণ রয়েছে:

2*(2*(2*(2*(2*(2*(2*"g8" + "g7") + "g6") + "g5") + "g4") + "g3") + "g2") + "g1"

বিটওয়াইজ অপারেশনগুলিও এই পদক্ষেপের জন্য পরিষেবাতে চাপ দেওয়া যেতে পারে। বিকল্পভাবে, আপনি ক্ষেত্রের গণনার পরে কম্বাইন ব্যবহার করতে পারেন । (ক্ষেত্রের গণনা পূর্ববর্তীটির মতোই একটি অভিব্যক্তি হবে))

Reclassification টেবিল জন্য 00000000B = 0 এবং 11111111B = 255 মধ্যে সব মানের জন্য সর্বোচ্চ রান লেন্থ প্রদান আছে, এখানে তারা হল:

0, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 3, 2, 2, 2, 2, 3, 3, 4, 5, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 2, 3, 4, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 6, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 3, 2, 2, 2, 2, 3, 3, 4, 5, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 7, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 2, 3, 4, 1, 1, 1, 2, 1, 1, 2, 3, 2, 2, 2, 2, 3, 3, 4, 5, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 2, 2, 2, 3, 4, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 6, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 3, 4, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 3, 4, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8

এই পদ্ধতিটি অর্গজিআইএসে প্রায় 20 টি গ্রিডের মধ্যে সীমাবদ্ধ: এর চেয়ে বেশি ব্যবহার করে একটি অতিরঞ্জিত বৈশিষ্ট্য সারণী তৈরি করা যায়। ( Combineবিশেষত 20 গ্রিডের মধ্যে সীমাবদ্ধ))


একটি বিশাল +1: এটি একটি খুব ভাল ধারণা। (একমাত্র সীমাবদ্ধতা হ'ল যখন 31 টিরও বেশি গ্রিড জড়িত থাকে, আপনি ব্যবহার করার জন্য বিটগুলি ছাড়ে।
হোয়বার

3

আপনি কি 2 (1,2,4,8,16,32) পাওয়ার সাথে মানগুলি 0 এবং 1 থেকে মানগুলিতে পরিবর্তন করার কথা ভাবেন? আপনি 8 টি গ্রিড একত্রিত করার সময় প্রতিটি কক্ষের জন্য আপনি অনন্য মান পাবেন যা আপনাকে পরপর তথ্য দেয় (যেমন: 3 এর মান মানে বছর 1 এবং 2, যেখানে 54 এর মান 6 থেকে 8 বছর হবে)।

শুধু একটি ভাবনা


রায়ান, অ্যান্ডি হারফুট কয়েক ঘন্টা আগে এই পরামর্শটি দিয়েছিল। :-)
whuber

ধন্যবাদ এবং দুঃখিত। আমি ছুটিতে আমার ফোনে এটি পড়ছি।
রায়ান গারনেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.