কয়েক মিলিয়ন ডেটা পয়েন্টের জন্য নিকটতম প্রতিবেশী গণনার পুনরাবৃত্তি খুব ধীর


14

আমার একটি ডেটাসেট 3 ডি-তে কয়েক মিলিয়ন ডেটা পয়েন্টে চলছে। আমি যে গণনাটি করছি তার জন্য, আমাকে ব্যাসার্ধের প্রতিটি উপাত্তের প্রতিবেশী (পরিসীমা অনুসন্ধান) গণনা করতে হবে, একটি ফাংশন ফিট করার চেষ্টা করতে হবে, ফিটের জন্য ত্রুটির গণনা করতে হবে, এটি পরবর্তী ডেটাপয়েন্টের জন্য পুনরাবৃত্তি করতে হবে এবং আরও অনেক কিছু। আমার কোডটি সঠিকভাবে কাজ করে তবে এটি চালাতে খুব বেশি সময় নিচ্ছে, ডেটাপয়েন্টে প্রায় 1 সেকেন্ড! এটি সম্ভবত প্রতিটি পয়েন্টের জন্য, এটি পুরো ডেটাसेटে অনুসন্ধান করতে হবে। প্রক্রিয়াটি দ্রুততর করার কোনও উপায় আছে কি? আমার ধারণা আছে যে আমি যদি প্রথম প্রতিবেশীদের মধ্যে কিছুটা সংলগ্ন সম্পর্ক স্থাপন করতে পারি তবে এটি কম ধীর হতে পারে। যদি এটি সহায়তা করে, আমি 3D এ সর্বোত্তম পার্জন উইন্ডো প্রস্থ সন্ধান করার চেষ্টা করছি।

উত্তর:


9

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


7

তথ্য সংরক্ষণের জন্য বেশ কয়েকটি ডেটা স্ট্রাকচার রয়েছে যা অবস্থান এবং নৈকট্য সম্পর্কে তথ্য সংরক্ষণ করে; দ্রুত নিকটতম প্রতিবেশী (গুলি) নির্ধারণের অনুমতি দিয়ে সেখানে।

বিশেষত আর- ট্রিগুলিতে (এবং বিশেষত ফর্ম যেমন আর *-ট্রি ) এবং এক্স-ট্রি । কিছুটা পছন্দ যা সামান্য ভিন্ন ব্যবহারের জন্য অনুকূলিত হয়।

কোনও নিখুঁত নিকটবর্তী প্রতিবেশী লুক-আপের চেয়ে আর * -ট্রি পছন্দ করা আমার নির্দিষ্ট কোড থেকে 10000 স্পিডআপের ফ্যাক্টর পাওয়ার এক বড় অংশ ছিল। (ঠিক আছে, এর মধ্যে কয়েক শতাধিকটি হ'ল আর * ট্রি, বাকী বেশিরভাগ কারণ ছিল নিষ্পাপ বর্ণনাকে খারাপভাবে কোডিং করা হয়েছিল যাতে এটি ক্যাশে ভেঙে যায় hed :: দীর্ঘশ্বাস : :)

হে(এনলগএন)এনহে(লগএন)


5

এটি আণবিক গতিবিদ্যার ক্ষেত্রে সবচেয়ে বড় চ্যালেঞ্জগুলির সাথে খুব মিল — নন-বাঁকানো কণার মধ্যে জুটিওয়ালা ইন্টারঅ্যাকশনগুলির সমস্ত গণনা করে।

সেখানে, কাছাকাছি কী আছে তা নির্ধারণ করতে আমাদের সহায়তা করতে আমরা সেল তালিকা (বা প্রতিবেশী তালিকা ) ব্যবহার করি ; এই অ্যাপ্লিকেশনটির জন্য, সেল তালিকাটি সম্ভবত ব্যবহার করা সহজতর অ্যালগরিদম:

  • বাক্সটি কয়েকটি ঘরতে ভাগ করুন।
  • প্রতিটি কণার জন্য, এটি নির্ধারণ করুন কোন কোষটি এটি নির্দিষ্ট করা উচিত (প্রতি কণায় ও (1))।
  • তারপরে, প্রতিটি কণার জন্য, "নিজস্ব" সেলটি পাশাপাশি প্রতিবেশী সেলগুলি পরীক্ষা করুন; এর মধ্যে যদি কোনওটি দখল করে থাকে, তবে আর অনুসন্ধানের প্রয়োজন নেই।
  • যদি নিকটস্থ সমস্ত প্রতিবেশী খালি থাকে, তবে পরবর্তী নিকটবর্তী প্রতিবেশীদের কাছে প্রসারিত করুন, এবং এভাবেই, কোনও কণা না পাওয়া পর্যন্ত।

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


আপনার উল্লেখ করা উচিত যে ঘরের প্রান্তের দৈর্ঘ্য কমপক্ষে অনুসন্ধান ব্যাসার্ধের হতে হবে বা যদি প্রতিটি কণার নিজস্ব অনুসন্ধান ব্যাসার্ধ থাকে তবে সর্বাধিক ব্যাসার্ধের।
পেড্রো

এমডি ক্ষেত্রে এটি সত্য; এখানে, আমরা জানি না যে ব্যাসার্ধটি কী প্রাইরি হয়
আইজমিল

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

4

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

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


3

আপনার সম্ভবত ডেলাউন ট্রায়াঙ্গুলেশন (ভাল, এর 3 ডি এনালগ) তৈরির কথা বিবেচনা করা উচিত । 2 ডি তে, এটি ডেটা পয়েন্টগুলির একটি বিশেষ ত্রিভুজ যা সর্বদা নিকটতম প্রতিবেশী থাকে। একই থ্রিডিতে ধারণ করে, তবে তেত্রহেদ্রের সাথে।

আপনি একবার এবং সমস্ত ত্রিভুজির জন্য তৈরি করতে পারেন এবং তারপরে ত্রিভুজায় সরাসরি নিকটতম প্রতিবেশীর জন্য অনুসন্ধান করতে পারেন। আমি মনে করি যে ত্রিভুজটি তৈরির জন্য কিছু ভাল অ্যালগরিদম রয়েছে: 2 ডি তে, ত্রিভুজটির নির্মাণ চলছেএনলগ(এন) এবং পরবর্তী নিকটতম প্রতিবেশীর জন্য অনুসন্ধানগুলি ডেটা পয়েন্টের সংখ্যায় লিনিয়ার is

আশা করি এটা সাহায্য করবে!

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