একবার আমি হাস্কেল অ্যারে লাইব্রেরির বৈশিষ্ট্যগুলি পর্যালোচনা করি যা আমার জন্য গুরুত্বপূর্ণ, এবং একটি তুলনা টেবিল সংকলন করে (কেবল স্প্রেডশিট: সরাসরি লিঙ্ক )। সুতরাং আমি উত্তর দেওয়ার চেষ্টা করব।
ভেক্টর.উইনবক্সড এবং ইউএআরয়ের মধ্যে কোন ভিত্তিতে আমার চয়ন করা উচিত? এগুলি উভয়ই আনবক্সড অ্যারে, তবে ভেক্টর বিমূর্তনটি ভারীভাবে বিজ্ঞাপনযুক্ত বলে মনে হচ্ছে, বিশেষত লুপ ফিউশনকে ঘিরে। ভেক্টর কি সর্বদা ভাল? যদি তা না হয় তবে আমি কখন কোন উপস্থাপনা ব্যবহার করব?
যদি কারও দ্বি-মাত্রিক বা বহু-মাত্রিক অ্যারে প্রয়োজন হয় তবে ভেক্টরের চেয়ে ইউএআরআরিকে পছন্দ করা যেতে পারে। তবে ভেক্টরকে সঠিকভাবে পরিচালনা করার জন্য ভেক্টরটির সুন্দর এপিআই রয়েছে। সাধারণভাবে, ভেক্টর মাল্টি-ডাইমেনশনাল অ্যারেগুলি অনুকরণের জন্য ভালভাবে উপযুক্ত নয়।
ভেক্টর.অনবক্স করা সমান্তরাল কৌশলগুলির সাথে ব্যবহার করা যাবে না। আমি সন্দেহ করি যে ইউএআরএই দুটোই ব্যবহার করা যায় না, তবে কমপক্ষে ইউএআরএ থেকে বক্সেড অ্যারেতে স্যুইচ করা খুব সহজ এবং দেখুন যে সমান্তরালনের ফলে বক্সিং ব্যয়ের চেয়ে বেশি ওজন আছে কিনা।
রঙিন চিত্রগুলির জন্য আমি 16-বিট পূর্ণসংখ্যার ট্রিপল বা একক নির্ভুলতা ভাসমান-পয়েন্ট সংখ্যাগুলির ট্রিপল সংরক্ষণ করতে চাই। এই উদ্দেশ্যে, ভেক্টর বা ইউএআরএই হয় ব্যবহার করা সহজ? আরও পারফর্মেন্ট?
আমি চিত্রগুলি উপস্থাপন করতে অ্যারে ব্যবহার করার চেষ্টা করেছি (যদিও আমাকে কেবল গ্রেস্কেল চিত্রের প্রয়োজন ছিল)। রঙিন চিত্রগুলির জন্য আমি চিত্রগুলি পড়তে / লিখতে কোডেক-চিত্র-ডেভিল লাইব্রেরি ব্যবহার করেছি (ডিভিল লাইব্রেরির সাথে বাইন্ডিংগুলি), গ্রেস্কেল চিত্রগুলির জন্য আমি পিজিএম লাইব্রেরি (খাঁটি হাস্কেল) ব্যবহার করেছি।
অ্যারের সাথে আমার বড় সমস্যাটি হ'ল এটি কেবল এলোমেলো অ্যাকসেস স্টোরেজ সরবরাহ করে তবে এটি অ্যারে অ্যালগরিদম তৈরির অনেকগুলি উপায় সরবরাহ করে না বা অ্যারে রুটিনগুলির লাইব্রেরি ব্যবহারের জন্য প্রস্তুত হয় না (লিনিয়ার বীজগণিত লাইবসের সাথে ইন্টারফেস দেয় না, না) কনভলিউশন, ফাফ্ট এবং অন্যান্য রূপান্তরগুলি প্রকাশ করার অনুমতি দেয় না)।
প্রায় প্রতিটি সময় বিদ্যমান বিদ্যমান থেকে একটি নতুন অ্যারে তৈরি করতে হবে, মানগুলির একটি অন্তর্বর্তী তালিকা তৈরি করতে হবে ( ভদ্র পরিচিতির ম্যাট্রিক্স গুণে যেমন )। অ্যারে নির্মাণের ব্যয় প্রায়শই দ্রুত এলোমেলো অ্যাক্সেসের সুবিধাগুলির ওজন করে। এই বিন্দুতে যে আমার ব্যবহারের ক্ষেত্রে কিছু ক্ষেত্রে তালিকাভিত্তিক প্রতিনিধিত্ব দ্রুত হয়।
STUArray আমাকে সাহায্য করতে পারে তবে আমি ক্রিপ্টিক টাইপের ত্রুটিগুলির সাথে লড়াই করতে পছন্দ করি না এবং STUArray এর সাথে পলিমারফিক কোড লেখার জন্য প্রয়োজনীয় প্রচেষ্টা চেষ্টা করি ।
সুতরাং অ্যারেগুলির সাথে সমস্যাটি হ'ল তারা সংখ্যামূলক গণনাগুলির জন্য ভাল উপযুক্ত নয়। হ্যাম্যাট্রিক্সের ডেটা.প্যাকড.ভেক্টর এবং ডেটা.প্যাকড.ম্যাট্রিক্স এই ক্ষেত্রে আরও ভাল, কারণ তারা একটি শক্ত ম্যাট্রিক্স লাইব্রেরির সাথে আসে (মনোযোগ: জিপিএল লাইসেন্স)। পারফরম্যান্স অনুসারে, ম্যাট্রিক্সের গুণায়, হ্যাম্যাট্রিক্স যথেষ্ট দ্রুত ছিল (অক্টাভের তুলনায় কেবল সামান্য ধীর ) তবে খুব স্মৃতিশক্তিভুক্ত (পাইথন / সাইপাইয়ের চেয়ে কয়েকগুণ বেশি পরিমাণে গ্রাস করা হয়েছিল)।
ম্যাট্রিক্সের জন্য ব্লেস লাইব্রেরি রয়েছে, তবে এটি জিএইচসি 7 তে তৈরি করে না।
রেপার সাথে আমার এখনও খুব বেশি অভিজ্ঞতা হয়নি, এবং রেপা কোডটি আমি ভালভাবে বুঝতে পারি না। আমি যা দেখছি তার থেকে এর উপরে লিখিত ম্যাট্রিক্স এবং অ্যারে অ্যালগরিদমগুলি ব্যবহারের জন্য খুব সীমিত পরিসীমা রয়েছে তবে কমপক্ষে লাইব্রেরির মাধ্যমে গুরুত্বপূর্ণ অ্যালগরিদমগুলি প্রকাশ করা সম্ভব। উদাহরণস্বরূপ, ইতিমধ্যে ম্যাট্রিক্স গুণণের জন্য এবং রেপা-অ্যালগোরিদমে কনভলভ করার জন্য রুটিন রয়েছে । দুর্ভাগ্যক্রমে, দেখে মনে হচ্ছে কনভোলশনটি এখন 7 × 7 কার্নেলের মধ্যে সীমাবদ্ধ (এটি আমার পক্ষে যথেষ্ট নয়, তবে অনেকগুলি ব্যবহারের জন্য যথেষ্ট হওয়া উচিত)।
আমি হাস্কেল ওপেনসিভি বাইন্ডিং চেষ্টা করিনি। এগুলি দ্রুত হওয়া উচিত, কারণ ওপেনসিভি সত্যিই দ্রুত, তবে আমি নিশ্চিত নই যে বাইন্ডিংগুলি পরিপূর্ণ এবং ব্যবহারযোগ্য হওয়ার জন্য যথেষ্ট ভাল। এছাড়াও, ওপেনসিভি এর প্রকৃতির দ্বারা খুব আবশ্যক, ধ্বংসাত্মক আপডেটগুলি পূর্ণ। আমি মনে করি এটির উপরে একটি দুর্দান্ত এবং দক্ষ কার্যকরী ইন্টারফেস ডিজাইন করা শক্ত। যদি কেউ ওপেনসিভি পথে যায় তবে তিনি সম্ভবত সর্বত্র ওপেনসিভি চিত্র উপস্থাপনা ব্যবহার করবেন এবং সেগুলি পরিচালনা করতে ওপেনসিভি রুটিন ব্যবহার করবেন।
বিটোনাল চিত্রগুলির জন্য আমার প্রতি পিক্সেলটিতে 1 বিট সংরক্ষণ করতে হবে। এমন কোনও পূর্বনির্ধারিত ডেটাটাইপ রয়েছে যা একাধিক পিক্সেল একটি শব্দের মধ্যে প্যাক করে আমাকে এখানে সহায়তা করতে পারে, বা আমি নিজে থেকে আছি?
যতদূর আমি জানি, বুলসগুলির আনবক্সেড অ্যারেগুলি বিট ভেক্টরগুলিকে প্যাকিং এবং আনপ্যাকিংয়ের যত্ন নেয়। আমি মনে করি অন্য লাইব্রেরিতে বুলের অ্যারেগুলি প্রয়োগের দিকে তাকিয়ে ছিলাম এবং এটি অন্য কোথাও দেখিনি।
অবশেষে, আমার অ্যারেগুলি দ্বিমাত্রিক। আমি মনে করি যে আমি "অ্যারের অ্যারে" (বা ভেক্টরগুলির ভেক্টর) হিসাবে উপস্থাপনের দ্বারা আরোপিত অতিরিক্ত নির্দেশনাটি মোকাবিলা করতে পারি, তবে আমি সূচি-ম্যাপিং সমর্থনযুক্ত একটি বিমূর্ততা পছন্দ করব। স্ট্যান্ডার্ড লাইব্রেরি থেকে বা হ্যাকেজ থেকে যে কেউ সুপারিশ করতে পারে?
ভেক্টর (এবং সাধারণ তালিকা) ব্যতীত অন্য সমস্ত অ্যারে লাইব্রেরি দ্বি-মাত্রিক অ্যারে বা ম্যাট্রিকগুলি উপস্থাপন করতে সক্ষম। আমি মনে করি তারা এলোমেলো ইন্দিরেশন এড়ায়।