পাইথনের খুব বড় এবং স্পারস সংলগ্ন ম্যাট্রিক্সের সমস্ত ইগনাল্যগুলি গণনা করার দ্রুততম উপায় কী?


12

আমি খুঁজে বের করার চেষ্টা করছি যে scipy.sparse.linalg.eigsh ব্যবহারের চেয়ে খুব বড় এবং স্পারস সংলগ্ন ম্যাট্রিক্সের সমস্ত ইগনালভগুলি এবং আইজেনভেেক্টরগুলিকে গণনা করার একটি দ্রুত উপায় আছে কিনা আমি জানি যতদূর আমি জানি, এই পদ্ধতিগুলি কেবল স্বল্পতা এবং ম্যাট্রিক্সের প্রতিসম বৈশিষ্ট্য। একটি সংলগ্ন ম্যাট্রিক্সটিও বাইনারি, যা আমাকে মনে করে এটি করার আরও দ্রুত উপায় আছে।

আমি একটি এলোমেলো 1000x1000 স্পারস সংলগ্ন ম্যাট্রিক্স তৈরি করেছি এবং আমার x230 উবুন্টু 13.04 ল্যাপটপের বিভিন্ন পদ্ধতির মধ্যে তুলনা করছি:

  • scipy.sparse.linalg.eigs: 0.65 সেকেন্ড
  • scipy.sparse.linalg.eigsh: 0.44 সেকেন্ড
  • scipy.linalg.eig: 6.09 সেকেন্ড
  • scipy.linalg.eigh: 1.60 সেকেন্ড

বিচ্ছিন্ন eigs এবং eigsh এর সাহায্যে আমি ম্যাট্রিক্সের পদমর্যাদায় কাঙ্ক্ষিত eigenvalues ​​এবং eigenvectors এর সংখ্যা নির্ধারণ করেছি।

সমস্যাটি বড় ম্যাট্রিক্স দিয়ে শুরু হয় - 9000x9000 ম্যাট্রিক্সে, এটি 45 মিনিটের জন্য scipy.sparse.linalg.eigsh নিয়েছিল!


1
বিশেষ দ্রষ্টব্য। scipy.sparse.linalg.eigsh হ'ল ARPACK
পিভি।

4
অনুসরণ করার জন্য, আপনার ম্যাট্রিক্স যত বড় হবে আপনি অভ্যন্তরীণ ইগেনভ্যালুগুলি (যেটি সবচেয়ে বড় বা ক্ষুদ্রতম এগেনভ্যালু নয়) সঠিকভাবে গণনা করার সম্ভাবনা তত কম। আপনি যে ম্যাট্রিক্সটি পচন করছেন তার থেকে আপনার কী তথ্য দরকার?
জেফ অক্সবেরি

1
এই প্রশ্নটি এখানে ক্রস পোস্ট করা হয়েছে । আমি সুপারিশ করতে যাচ্ছি যে ক্রস-পোস্ট সংস্করণটি বন্ধ।
অরন আহমদিয়া

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

2
হ্যাঁ, সরাসরি করুন ইগেনডিকোপজিশনের ফলাফলগুলি অপ্রতুল নয় সুতরাং আপনার স্টোরেজ সংক্রান্ত সমস্যা থাকবে (তারপরে আবার, কে যথেষ্ট পরিমাণে বড় না হলে A AK নয়)। সংশ্লিষ্ট stackoverflow.com/a/9495457/424631
dranxo

উত্তর:


6

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

যদি আপনার শেষ লক্ষ্যটি ম্যাট্রিক্সের বৃহত শক্তিগুলি গণনা করা হয় তবে আপনি কেবল বৃহত্তম ইগেনভ্যালুগুলির সাথে মিলিত ইগেনভেেক্টরগুলি গণনা করতে পারেন, এই জ্ঞানের বিষয়বস্তুতে যে আপনি বড় শক্তি গ্রহণের কারণে ছোট মোডগুলি কম গুরুত্বপূর্ণ হবে।

এটি বলেছিল, আপনি সরাসরি ক্ষমতাগুলি নির্ধারণের চেয়ে ভাল হতে পারেন। আপনি উচ্চতর শক্তিগুলি গণনা করার সাথে সাথে এগুলি কম ও কম হ'ল, যার অর্থ আরও বেশি স্মৃতি গ্রহণ করা হবে; কত উঁচু উপর নির্ভর করে আপনি অবশেষে ঘন ম্যাট্রিক্সে যেতে চান।k

যদি এগুলি আপনার কাছে ইতিমধ্যে সুস্পষ্ট থাকে তবে আমাকে ক্ষমা করুন: আপনি ম্যাট্রিক্সের বাইনারি প্রকৃতিটিকে ন্যাপ্পিকে বলে যে এটিতে ভাসমানের পরিবর্তে পূর্ণসংখ্যার সমন্বিত রয়েছে তা কাজে লাগাতে পারেন, ব্যবহার করে বলুন

a = np.zeros(100,dtype=np.uint)

এটি (আশাবাদী) কিছু জায়গা সাশ্রয় করবে। আপনি ম্যাট্রিক্সের গুণগুলি অবরুদ্ধ করে সময় বাঁচাতে পারেন (তবে মেমরি নয়)। বলুন আপনি গণনা করতে চান ; আপনি গণনা করুন , তারপরে পাওয়ার জন্য এটি বর্গক্ষেত্র করুন, পেতে এই বর্গাকার করুন , এবং আরও। এই ভাবে, আপনি কি ম্যাট্রিক্স পরিবর্তে multiplications multiplications।A16A2A4A8log2kk

গতি যদি আপনার উদ্বেগ এবং আপনার যদি এনভিআইডিএ জিপিইউ থাকে তবে আপনি পাইথন থেকে সিউএসপি বা সিএসপিএসএসএসের মতো সমান্তরাল বিচ্ছিন্ন লিনিয়ার বীজগণিত গ্রন্থাগার কল করতেও অন্বেষণ করতে পারেন।


1

আমি ড্যানিয়েল শ্যাপারোর উত্তর সম্পর্কে মন্তব্য করতে চাই তবে আমার যথেষ্ট এসই খ্যাতি নেই।

গৃহীত উত্তর আমাকে অনেক গুলিয়ে দেয়। আমি মনে করি শিফট-ইনভার্ট মোডটি সহজেই অভ্যন্তরীণ ইগ্যালভ্যালগুলি গণনা করতে ব্যবহার করা যেতে পারে। দেখুন: https://docs.scipy.org/doc/scipy/references/tutorial/arpack.html

মূল প্রশ্নের উত্তর দিতে: এটি খুব কমই ঘটে যায় যে আপনি একটি বড় স্পার্স ম্যাট্রিক্সের সমস্ত ইগন্যালুয়েস চান। সাধারণত, আপনি চরম বা অভ্যন্তর মানের কিছু গুচ্ছ চান cl সেক্ষেত্রে হার্মিটিয়ান ম্যাট্রিক্সের eigshজন্য দ্রুত is নন-হার্মিটিয়ানদের জন্য আপনাকে যেতে হবে eigs। এবং এগুলি নিম্পের চেয়ে অনেক দ্রুত eigবা eigh

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