বড় টেবিলের সাথে পাইথনে আর্কজিআইএস কার্সার ব্যবহার করার সময় কীভাবে কর্মক্ষমতা উন্নত করবেন?


10

আমার একটি ফাইল জিওডাটাবেজে (000 4 000 000 রেকর্ডস) একটি দুর্দান্ত বিগ পয়েন্ট ফিচার ক্লাস রয়েছে। এটি 100 মিটার রেজোলিউশন সহ পয়েন্টগুলির নিয়মিত গ্রিড।

এই স্তরটিতে আমার এক ধরণের সাধারণীকরণ করা দরকার perform এর জন্য, আমি একটি নতুন গ্রিড তৈরি করি যেখানে প্রতিটি পয়েন্ট 4 "পুরানো" পয়েন্টের মাঝখানে থাকে:

 *     *     *     *
    o     o     o
 *     *     *     *
    o     o     o
 *     *     *     *

[*] = মূল গ্রিডের পয়েন্ট - [ও] = নতুন গ্রিডের পয়েন্ট

প্রতিটি নতুন পয়েন্টের বৈশিষ্ট্যের মানটি পুরানো গ্রিডে তার 4 প্রতিবেশীর ভারিত মানের ভিত্তিতে গণনা করা হয়। আমি এইভাবে আমার নতুন গ্রিডের সমস্ত পয়েন্টগুলিতে লুপ করি এবং তাদের প্রত্যেকের জন্য প্রতিবেশীদের সন্ধান করতে (বৈশিষ্ট্য সারণীতে এক্স এবং ওয়াইয়ের মান তুলনা করে) আমি আমার পুরানো গ্রিডের সমস্ত পয়েন্টগুলিতে লুপ করি। একবার 4 প্রতিবেশী পাওয়া গেছে, আমরা লুপ থেকে বেরিয়ে যান।

এখানে কোনও পদ্ধতিগত জটিলতা নেই তবে আমার সমস্যাটি হ'ল আমার প্রথম পরীক্ষার উপর ভিত্তি করে এই স্ক্রিপ্টটি কয়েক সপ্তাহ পর্যন্ত শেষ হবে ...

আপনি এটিকে আরও দক্ষ করার কোনও সম্ভাবনা দেখছেন? আমার মাথার শীর্ষে কয়েকটি ধারণা:

  • ক্ষেত্রগুলি X এবং Y => সূচকগুলি আমি তা করেছিলাম তবে কোনও উল্লেখযোগ্য পারফরম্যান্সের পরিবর্তন লক্ষ্য করিনি
  • কোনও অ্যাট্রিবিউট-ভিত্তিক না হয়ে প্রতিবেশীদের সন্ধানের জন্য একটি স্থানিক জিজ্ঞাসা করুন। এটা কি আসলে সাহায্য করবে? আরকজিআইএস-এ কোন স্থানিক কাজটি করা উচিত? আমি সন্দেহ করি যে, উদাহরণস্বরূপ, প্রতিটি নতুন পয়েন্ট বাফারিং আরও কার্যকর প্রমাণিত করবে
  • বৈশিষ্ট্য শ্রেণিকে একটি নুমপি অ্যারে রূপান্তর করুন। যে সাহায্য করবে? আমি এখন পর্যন্ত নুমপির সাথে খুব বেশি কাজ করি নি এবং কেউ যদি আমাকে না বলে এটি প্রসেসিংয়ের সময় হ্রাস করতে সহায়তা করে তবে আমি তাতে ডুব দিতে চাই না
  • আর কিছু?

আপনি আর্কম্যাপের কোন সংস্করণ ব্যবহার করছেন?
মার্টিন

আপনি পোস্টজিআইএস বিবেচনা করেছেন? এটি কি বিকল্প?
চাদ কুপার

দুঃখিত যে আমি এটি ভুলে গেছি: আরকজিআইএস 10.1 // পাইথন 2.7
স্টাফেন হেনরিড

নাহ, পোস্টজিআইএস দুর্ভাগ্যক্রমে কোনও বিকল্প নয়, আমার হাত এখানে দুর্ভাগ্যক্রমে বেশ বাঁধা আছে ...
সর্বোপরি আমি এসডি

উত্তর:


13

আপনি যদি বিন্দুগুলিকে একটি অলস বিন্যাসে খাওয়াতেন এবং প্রতিবেশীদের সন্ধানের জন্য স্কিপি সি কেডিট্রি ব্যবহার করেন তবে কী হবে? আমি এই কৌশলটি ব্যবহার করে বেশ কয়েকটি MINUTES এ বৃহত সংখ্যক পয়েন্ট (> 20 মিলিয়ন) সহ লিডার পয়েন্ট ক্লাউডগুলি প্রক্রিয়া করি। এখানে কেডিট্রি এবং নপি রূপান্তরকরণের জন্য এখানে ডকুমেন্টেশন রয়েছে । মূলত, আপনি অ্যারেতে x, y পড়েছেন এবং অ্যারের প্রতিটি বিন্দুতে প্রতিটি পয়েন্টের একটি নির্দিষ্ট দূরত্বে (আশেপাশের) পয়েন্টের সূচকগুলি সন্ধান করে পুনরাবৃত্তি করেন। আপনি অন্যান্য সূত্রগুলি গণনা করতে এই সূচকগুলি ব্যবহার করতে পারেন।


এই উত্তরটি আমার চেয়ে ভাল
রাডউক্সজু

আমি এই ধারণাটি পছন্দ করি তবে আমি যে ওয়ার্কস্টেশনটিতে কাজ করছি তার (এবং অ্যাডমিনের কোনও অধিকার নেই) আমার কাছে কোনও ফাঁকি নেই। যদি আমি এই প্যাকেজটি ইনস্টল করার ব্যবস্থা করে রাখি, তবে আমি এটি দিয়ে চেষ্টা করব
স্টাফেন হেনরিড

4

আমি বারবারোসার সাথে আছি ... আরকি কর্সারগুলি অত্যন্ত পঙ্গু are তাই আমি কেবলমাত্র একটি টেবিল বা বৈশিষ্ট্য বর্গকে সঠিকভাবে অনুসরণ করতে ব্যবহার করি। যদি আমি একটি চক্রের মধ্যে কাজটি না করতে পারি তবে আমি কার্সারটি ব্যবহার করে অন্য কোনও ধরণের ডেটা স্ট্রাকচার পূরণ করতে এবং এটি দিয়ে কাজ করি।

আপনি যদি নম্পির সাথে ঝামেলা করতে না চান তবে কেবল একটি সাধারণ অজগর অভিধান তৈরি করুন যেখানে আপনি আপনার সমন্বয়গুলি একটি সাধারণ পাঠ্য কী হিসাবে ব্যবহার করেন এবং অভিধানের আইটেমটির মান হিসাবে একটি তালিকাতে গণনার জন্য আপনার প্রয়োজনীয় বৈশিষ্ট্যগুলি পূরণ করুন।

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


আমি আপনার ধারণাগুলি অভিধান সহ পছন্দ করি এবং আমি কেবল এটি প্রয়োগ করেছিলাম। এটি প্রকৃতপক্ষে আরও ভালভাবে কাজ করে ... যতক্ষণ না আমি সত্যই একটি قطار.insertRow () দিয়ে ফলাফলগুলি লিখি ... আমি কীভাবে এই অংশটিকে আরও উন্নত করতে পারি তার কোনও ধারণা?
স্টাফেন হেনরিড

আমার একই রকম সমস্যা হয়েছে যেখানে 14 টি মিও এর মধ্যে আমাকে 10.000 পয়েন্ট নির্বাচন করতে হয়েছিল i এবং তারপরে এটি মুছুন। arcpy.cursors যেখানে প্রতি সেকেন্ডে প্রায় 1 বা 2 পয়েন্ট মুছতে সক্ষম (!)। সুতরাং আমি কেবল একটি সেকেন্ডের মধ্যে একটি একক এসকিউএল ডিলিট বিবৃতি দিয়ে এগুলি মুছতে পায়োডবিসি মডিউল ইনস্টল করেছি। এসকিউএল-এর মাধ্যমে আপডেট করা আপনাকে অনেক উন্নতি এনে দেবে, যতক্ষণ না আপনি কেবল বৈশিষ্ট্যগুলি সংশোধন করতে চান ... তবুও আপনাকে অতিরিক্ত পাইথন মডিউল ইনস্টল করতে হবে ... তবে এটি মূল্যবান।
জর্জেন জোর্নিগ

2

একটি নিয়মিত গ্রিডের জন্য, এটি একটি রাস্টার ফর্ম্যাটে আরও বেশি দক্ষ হওয়া উচিত। আপনার প্রথম গ্রিডটিকে একটি রাস্টার হিসাবে রূপান্তর করুন, আপনি একই রেজোলিউশনে বিলিনিয়ার ইন্টারপোলটার ব্যবহার করে পুনরায় নমুনা করতে পারেন তবে এক্স এবং ওয়াইতে আপনার আউটপুট চিত্রটি 1/2 পিক্সেল দ্বারা সরিয়ে নিয়ে আবার পয়েন্টে ফিরে যেতে পারেন যদি আপনার এখনও পয়েন্ট দরকার হয় তবে।

সম্পাদনা করুন: জটিল সিদ্ধান্তের বিধিগুলির জন্য, আপনি যে নতুন ক্ষেত্রটি নতুন রাস্টার ব্যান্ড হিসাবে প্রয়োজন তার প্রতিটি ক্ষেত্রে রূপান্তর করতে পারেন, তারপরে আপনি সেই ব্যান্ডগুলির চারটি অনুলিপি তৈরি করতে পারেন এবং আপনি রাস্তার দিকে 1/2 পিক্সেল দ্বারা স্থান পরিবর্তন করতে পারেন (+50, - 50), (+ 50, + 50), (-50, -50) এবং (-50, + 50)। তারপরে আপনি নিয়মিত মানচিত্র বীজগণিত ব্যবহার করতে পারেন


ধন্যবাদ আমি আসলে এই সমাধানটি ভেবে দেখেছি তবে রাস্টার ফর্ম্যাটে যদি আমি কীভাবে নতুন মান গণনার বাস্তবায়ন করতে পারি তা নিশ্চিত নই। আমাকে ব্যাখ্যা করতে দাও: প্রতিটি নতুন পয়েন্টের জন্য (বা নতুন রাস্টার সেল) এর জন্য এর মূল্য গণনা করা দরকার: আমি এর প্রতিবেশীর প্রত্যেকেরই মান নিয়েছি। এই মানগুলির প্রত্যেকটিরই নতুন বিন্দুকে একটি নির্দিষ্ট মান দেওয়ার সম্ভাবনা থাকে। উদাহরণস্বরূপ, যদি কোনও প্রতিবেশীর মান 202 হয় তবে তা 3 (1 টির ওজন সহ) বা 11 (5 এর ওজন সহ) মান দেবে। তারপরে আমরা চারটি প্রতিবেশীর জন্য যোগফল দিয়েছি এবং নতুন মানটি খুঁজে
পাই

পিএস: নতুন মানটি নির্ধারণের গণনা, কিছু ক্ষেত্রে, কেবলমাত্র একটি নয়, 2 টি বৈশিষ্ট্যের উপর ভিত্তি করে তৈরি করা যেতে পারে যা রাস্টার পদ্ধতির বিষয়টি বাতিল করতে পারে
স্টাফেন হেনরিড

আপনার ওজনের পরিমাণের জন্য আপনার কেবল দুটি রাস্টার দরকার: একটি যেখানে আপনি ওজন এবং মানগুলির পণ্যটির পুনরায় নমুনা করেন, দ্বিতীয় যেখানে আপনি কেবল ওজনকে পুনরায় নমুনা করেন। যদি আপনি প্রথমটিকে দ্বিতীয় দ্বারা ভাগ করেন তবে আপনি নিজের ওজনফলকে যোগ করতে পারেন।
রেডাক্সজু

1
@ স্টাফেনহেনরিওড - একটি পরামর্শ হিসাবে, আপনি এই অতিরিক্ত স্পেসিফিকেশন যুক্ত করতে প্রশ্ন সম্পাদনা বিবেচনা করতে পারেন। প্রাথমিক প্রশ্নটি দেওয়া, আমি মনে করি এই উত্তরটি প্রচুর অর্থবোধ করে, তবে এই নতুন তথ্যের সাথে বার্বারোসার উত্তরটি ভাল দেখাচ্ছে looks
নিক্সান

2

আপনার সহায়তার জন্য সবাইকে ধন্যবাদ!

অবশেষে আমি এই সমস্যাটি সমাধান করার জন্য একটি অ-পাইথোনিক উপায় খুঁজে পেয়েছি ... যা আসলে সবচেয়ে বেশি সময় নিচ্ছিল তা ছিল প্রতিটি পয়েন্টের 4 প্রতিবেশী খুঁজে পাওয়া। এক্স এবং ওয়াই অ্যাট্রিবিউটগুলি (একটি আরকি কার্সার দিয়ে অথবা অন্য কোনও ডেটা স্ট্রাকচারের মধ্যে যেমন পাইথন ডিশনারির মতো) ব্যবহার না করে আমি আরকিজিআইএস সরঞ্জামটি টেবিলের নিকটে জেনারেট ব্যবহার করে শেষ করেছি । আমি ধরে নিই যে এটি স্থানিক সূচকগুলিতে সুবিধা গ্রহণ করে এবং অভিনয়গুলি স্পষ্টতই অনেক বেশি, আমাকে নিজেই সূচকটি প্রয়োগ না করেই।


0

কার্সারগুলির সমস্যা হ'ল আপনি কেবল সেগুলি দিয়ে কেবল একটি উপায়ে চক্র চালাতে পারেন এবং আপনি ফিরে যেতে পারবেন না। প্রস্তাবিত না হলেও, যদি আপনি পুনর্বিবেচনার পরিকল্পনা করেন তবে আপনি একটি কাঠামোতে ফিউটারগুলি বসিয়ে দিতে পারেন।

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

সমস্যাটি হ'ল আপনি যদি কার্সার থেকে পুনরুদ্ধার করা বৈশিষ্ট্যগুলি সংরক্ষণ করার পরিকল্পনা করে থাকেন তবে আপনি পুনর্ব্যবহারযোগ্য সক্ষম করতে পারবেন না।


আমি এই "রিসাইকেল কার্সার" বিষয়টি অন্বেষণ করতে চাই তবে ইএসআরআই সহায়তাতে কোনও দলিল খুঁজে পাচ্ছি না। আপনার কি লিংক আছে? অনুসন্ধান কার্সারের কোনও পুনর্ব্যবহারযোগ্য প্যারামিটার নেই। সিলেক্ট_বি_অ্যাট্রিবিউটের এমন কোনও পরামিতি নেই। আমি ENV তে কিছুই দেখছি না।
ক্লিওস

আমি কিছুক্ষণ ফিরে একটি নিবন্ধ লিখেছিলাম হসিনসিনাসার.com
2009/

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