বিরল ম্যাট্রিক্স গুণায় নন শূন্যগুলির সংখ্যা নির্ধারণ করার সর্বোত্তম উপায় কী?


17

আমি ভাবছিলাম যে দু'টি ম্যাট্রিক সিএসসি বা সিএসআর ফর্ম্যাটে রয়েছে ধরে নিয়ে স্পার্স ম্যাট্রিক্স গুণিতকরণ অপারেশনের জন্য আগাম নন জিরোগুলির সংখ্যা খুঁজে পাওয়ার জন্য একটি দ্রুত এবং দক্ষ পদ্ধতি আছে কি না।

আমি জানি স্মেপ প্যাকেজের মধ্যে একটি রয়েছে তবে আমার এমন কিছু দরকার যা ইতিমধ্যে সি বা সি ++ এ প্রয়োগ করা হয়েছে।

যে কোন ধরণের সাহায্য গ্রহন করা হবে. আগাম ধন্যবাদ.


আপনার ম্যাট্রিকের কি কোনও প্রতিসাম্যতা আছে, বা তাদের শূন্য-শুক্তিগুলির অবস্থানের কোনও কাঠামো আছে?
গড্রিক সের

@ গড্রিকসির ... না আমি কেবল সাধারণ স্পার্স ম্যাট্রিক্সের কথা বলছি at মতলবের এনএনজেড (এ) রয়েছে যেখানে এ-এর শূন্য নম্বরের সংখ্যা বের করার জন্য স্পার্স ম্যাট্রিক্স পদ্ধতি রয়েছে I আমি ভাবছিলাম যে এরকম কোনও পদ্ধতি আছে কিনা wond
রেকার

আমি ব্যক্তিগতভাবে number সংখ্যাটি গণনা করার কোনও উপায়ের কথা ভাবতে পারি না যা কিছু প্রতিসাম্যতা বা কাঠামো ব্যবহার না করে কেবল আসল ম্যাট্রিক্স গুণকরণের চেয়ে কম ক্রম হবে lower আমি ধরে নিচ্ছি যে গুণটি করার আগে আপনি মেমরি বরাদ্দের জন্য এটি চান?
গর্ড্রিক সের

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

@ গর্ড্রিকসির..আপনি ঠিক বলেছেন ঠিক ফলস্বরূপ ম্যাট্রিক্সের স্মৃতি বরাদ্দের জন্য আমার সঠিক সংখ্যাটি দরকার paper কাগজের লিঙ্কের জন্য ধন্যবাদ যদিও এটি আমাকে কিছুক্ষণের জন্য শুরু করতে পারে।
রেকার

উত্তর:


14

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


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

এটি একটি দুর্দান্ত ধারণা, তবে মিলিয়ন মিলিয়ন ট্রানজিস্টরকে সমান্তরালে ভাসমান * ভাসমান কাজ করে যাচ্ছেন, আমরা কেবল এখানে 50% বা তার আশেপাশের গতি সঞ্চয়ের কথা বলছি।
এভেজেনি সার্জিভ

1
@ অ্যাভেজেনিসারজিভ - মূল বিষয়টি গণনাগুলিতে সঞ্চয় নয়, মেমোরি ট্রান্সফারে সঞ্চয় রয়েছে। যেহেতু আপনি আজ বিরল ম্যাট্রিক্স গুণনের জন্য মেমরি স্থানান্তরের জন্য ৮০% বা তার বেশি সময় ব্যয় করেছেন, আপনার যদি / মেমরি থেকে ভাসমান পয়েন্ট ডেটা পড়তে / লিখতে না হয় তবে আপনি সম্ভবত উল্লেখযোগ্যভাবে লাভ করতে পারেন।
ওল্ফগ্যাং ব্যাঙ্গার্থ

আপনি কি আপনার পদ্ধতির জটিলতা স্পষ্টভাবে বর্ণনা করতে পারেন? যদি হল মি দ্বারা এটা আমার কাছে মনে হচ্ছে যে আপনার পদ্ধতি প্রয়োজন হে ( মি ) কাজ, সঠিক? CmkO(mk)
কার্ল খ্রিস্টান

@ কার্লচ্রিস্টিয়ান - আমাকে বিশদ বিবরণ জানাতে হবে, তবে এটি অবশ্যই হতে পারে না । এটি প্রতি সারিতে ননজারের সংখ্যা জড়িত করা দরকার। আপনার কাছে যদি প্রতিটি সারিতে গড়ে পি ননজারোস থাকে এবং সরলতার জন্য আপনার যদি এম = কে থাকে তবে আমি ধারণা করি যে আপনি ( এম পি লগ পি ) এর মতো কিছুতে পদ্ধতিটি প্রয়োগ করতে সক্ষম হবেন । ( মি 2 ) এর চেয়ে এটি অনেক ভাল । O(mk)pm=kO(mplogp)O(m2)
ওল্ফগ্যাং ব্যাঙ্গারথ

13

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

এডিথ কোহেন পেপারের আগে ১৯৯০ সালের দিকে আমরা স্পার মতলব-এর প্রাথমিক বাস্তবায়ন করেছি, যা সঠিকভাবে AB এর আকার নির্ধারণের জন্য প্রথম ব্যবহারিক, দ্রুত উপায় দিয়েছে। আমরা নিকৃষ্ট আকারের অনুমানকারীকে একসাথে রেখেছি, এবং যদি আমরা মধ্য গণনায় স্থানের বাইরে চলে যাই, বরাদ্দ দ্বিগুণ করেছি এবং আংশিক গণিত ফলাফলটি অনুলিপি করেছি।

আমি জানি না এখন মতলব কী আছে?

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


ওয়েল আমার জিপিইউ বাস্তবায়ন জন্য, আমি প্রথম অ শূন্য গঠন খোঁজার এবং তারপর খোঁজার প্রকৃত matrix.Performance ভয়ঙ্কর ছিল expected.I মনে হিসাবে তারা পদ্ধতি বর্ণিত ব্যবহার শেষ পর্যন্ত এই ম্যাটল্যাব দক্ষতার উপর সংখ্যাবৃদ্ধি দুই বিক্ষিপ্ত ম্যাট্রিক্স থেকে বই।
রেকার

2
সত্যই শীতল, historicalতিহাসিক দৃষ্টিকোণের জন্য ধন্যবাদ, এবং স্কিকম্প্পকে স্বাগত জানাই :)
অ্যারন আহমদিয়া

4

এই কাগজটি দুটি স্পার ম্যাট্রিক্সের ম্যাট্রিক্স পণ্য থেকে ফলাফলের আকারের আনুমানিক হিসাবের জন্য একটি অ্যালগরিদম বর্ণনা করে।

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

আপনি সম্ভবত উপরের কাগজটি মেমরির প্রয়োজনীয়তাগুলিকে অতিরিক্ত অনুমান করতে, গুণ করতে এবং তার পরে বরাদ্দকৃত মেমরিটি কেটে ফেলতে বা ফলস্বরূপ ম্যাট্রিক্সকে আরও উপযুক্ত আকারের অ্যারে স্থানান্তরিত করতে আরও ভাল better এছাড়াও, স্পার্স ম্যাট্রিক্স পণ্যগুলি বিরল ঘটনা নয় এবং আমি প্রায় গ্যারান্টি দিয়ে বলব যে এই সমস্যাটি এর আগেও সমাধান হয়ে গেছে। কিছু উন্মুক্ত উত্সে সামান্য খনন করা হলে, স্পার্স ম্যাট্রিক্স লাইব্রেরিগুলি স্মৃতিটিকে পূর্বপরিবর্তনের জন্য তারা যে অ্যালগরিদমগুলি ব্যবহার করে সেগুলিতে আপনাকে নেতৃত্ব দেয়।


0

সিএসআর বা সিএসসির জন্য, আপনি কি নিশ্চিত যে আপনার ম্যাট্রিক্স উপাদানগুলির অ্যারেটিতে ইতিমধ্যে কোনও জিরো নেই? সেক্ষেত্রে সাদৃশ্যপূর্ণ কিছু ব্যবহার করে সেখানে শূন্য-শূন্য উপাদানগুলির কতগুলি রয়েছে তা নির্ধারণ করা সহজ:

int nnz = sizeof(My_Array)/sizeof(long int);

তবে এটি যদি না হয় (কিছুটা সহজ মনে হয়) তবে আপনি যা চেষ্টা করতে পারেন তা হ্রাস । যদি আপনার ম্যাট্রিক্স উপাদানগুলির অ্যারে খুব বড় হয় তবে ননজারো উপাদানগুলির সংখ্যা গণনা করার এটি সবচেয়ে কার্যকর উপায়। অনেক সমান্তরাল সি / সি ++ লাইব্রেরি যেমন থ্রাস্ট (একটি সিইউডিএ লাইব্রেরি) বা ওপেনসিএল (যা আপনার ব্যবহারের জন্য জিপিইউ প্রয়োজন হয় না) শর্তাধীন হ্রাস করার জন্য সমর্থন রয়েছে - প্রতিটি উপাদানগুলির জন্য, ফলাফল যুক্ত করুন Condition(Element)। আপনি যদি শর্তটি সেট করে থাকেন Element != 0তবে আপনি ননজারো উপাদানের সংখ্যা যুক্ত করবেন। আপনি আপনার উপাদানগুলির অ্যারে থেকে শূন্য মূল্যের উপাদানগুলি সারি / কলাম সূচকের অ্যারে থেকে সরিয়ে এবং আপনার কলাম / সারি পয়েন্টারগুলি সামঞ্জস্য করতে চাইতে পারেন।


আপনার জবাবের জন্য ধন্যবাদ ... তবে আমি A * B তে অ জিরোগুলিকে উল্লেখ করছি যেখানে A এবং B অপ্রয়োজনীয় ম্যাট্রিক্স। আমার আগে থেকেই নন জিরো সংখ্যা দরকার যাতে ফলস্বরূপ ম্যাট্রিক্স সঞ্চয় করতে আমি সঠিক পরিমাণের মেমরি বরাদ্দ করতে পারি।
রেকার

0

সিএসআর প্রয়োগের সহজ উপায় হল চেষ্টা করা

std::vector< std::map<int, complex<float>> > 

আপনার ম্যাট্রিক্স উপস্থাপন। সেক্ষেত্রে আপনি শূন্য নয় এমন উপাদানগুলির সংখ্যা সম্পর্কে সত্যই চিন্তা করবেন না, সমস্ত মাধ্যমে অ্যাক্সেস করা হয়

std::map< int, complex<float> >::iterator

প্রতিটি সারিতে। সেরা ..


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