নম্পিতে ম্যাট্রিক্স বিপরীতে জটিলতা


11

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

আমার বর্তমান পছন্দটি numpy.linalg.inv । আমার সংখ্যাগুলি থেকে আমি দেখতে পাচ্ছি যে এটি হিসাবে স্কেল করে যেখানে n সারিগুলির সংখ্যা, সুতরাং পদ্ধতিটি গাউসিয়ান নির্মূল বলে মনে হয়।হে(এন3)

উইকিপিডিয়া অনুসারে , দ্রুততর অ্যালগরিদমগুলি উপলভ্য। এইগুলি প্রয়োগ করে এমন কোনও লাইব্রেরি আছে কি কেউ জানেন?

আমি অবাক হই, এই দ্রুত অ্যালগরিদমগুলি ব্যবহার করে কেন নোংরা হয় না?


আপনার আগে আপনার ম্যাট্রিকগুলি করা উচিত। স্কিপি তাকান। আপনার সাহায্যের জন্য স্পর্শ করুন। এটিতে আপনার প্রয়োজনীয় অনেকগুলি সরঞ্জাম রয়েছে।
তোবল

@ তোবাল নিশ্চিত নয় যে আমি অনুসরণ করছি ... আপনি কীভাবে একটি ম্যাট্রিক্স "সম্পাদন" করবেন? এবং ঠিক কীভাবে scipy.sparseসাহায্য করবে?
GoHokies

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

@ তোবাল প্রশ্নটি বিশেষত ঘন ম্যাট্রিক্সকে বোঝায় তাই আমি scipy.sparseএখানে কীভাবে প্রাসঙ্গিক তা দেখছি না ?
ক্রিশ্চান ক্ল্যাসন

2
@ তোবাল - আমি মনে করি আমি এখনও বুঝতে পারি না। "আপনার ম্যাট্রিক্সগুলি প্রিফর্ম করুন" এবং "কিছু হিসাব করার আগে ম্যাট্রিকগুলি অবশ্যই কার্যকরভাবে প্রয়োগ করা উচিত" এর অর্থ কী? আপনার শেষ মন্তব্য সম্পর্কে, অবশ্যই আপনি সম্মত হবেন যে স্পার্স এবং ঘন ম্যাট্রিক্সের জন্য যে কৌশলগুলি ব্যবহার করা যেতে পারে সেগুলি খুব আলাদা।
ওল্ফগ্যাং ব্যাঙ্গার্থ

উত্তর:


21

(মন্তব্যগুলির জন্য এটি অনেক দীর্ঘ হচ্ছে ...)

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

  1. -notation চামড়া শক্তি সামনে একটি ধ্রুবক এন , যা astronomically বৃহৎ হতে পারে - তাই বড় যে সি 1 এন 3 তুলনায় অনেক ছোট হতে পারে সি 2 এন 2. এক্স কোন এন যে কোনো কম্পিউটার দ্বারা পরিচালিত করা যেতে পারে সুদূর ভবিষ্যতে (উদাহরণস্বরূপ, কপারস্মিথ-উইনোগ্রাড অ্যালগরিদমের ক্ষেত্রে এটি রয়েছে))OnC1n3C2n2.xএন

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

এছাড়াও, সংখ্যাগত স্থায়িত্ব কমপক্ষে পারফরম্যান্সের মতো গুরুত্বপূর্ণ; এবং এখানে, আবার, স্ট্যান্ডার্ড পদ্ধতির সাধারণত জয় হয়।

O(n3)O(n2.x)


1 তবে আমি বিভ্রান্ত হব যদি আমি উল্লেখ করি না যে এটি খুব কমই সত্যিই প্রয়োজনীয়: যে কোনও সময় আপনার পণ্য গণনা করা দরকার , আপনি পরিবর্তে লিনিয়ার সিস্টেম A x = b সমাধান করবেন (উদাহরণস্বরূপ, ব্যবহার ) এবং পরিবর্তে এক্স ব্যবহার করুন - এটি অনেক বেশি স্থিতিশীল এবং এটি আরও দ্রুত করা যায় (ম্যাট্রিক্স এর কাঠামোর উপর নির্ভর করে ) faster আপনার যদি A - 1 টি একাধিকবার ব্যবহার করতে হয় তবে আপনি এর একটি কারণ (যা সাধারণত সমাধানের সবচেয়ে ব্যয়বহুল অংশ) প্রতিরোধ করতে পারেন এবং এটি পরে পুনরায় ব্যবহার করতে পারেন।A1Ax=numpy.linalg.solveএক্সএকজনএকজন-1একজন


দুর্দান্ত উত্তর, আপনাকে ধন্যবাদ স্যার, বিশেষত বিশদটিতে শয়তানকে নির্দেশ করার জন্য (বড় হে নোটেশনে ধ্রুবকগুলি) যা তাত্ত্বিক গতি এবং ব্যবহারিক গতির মধ্যে একটি বড় পার্থক্য তৈরি করে।
চমত্কার

আমি মনে করি "বিপরীতটি খুব কমই প্রয়োজনীয়" অংশটি আরও জোর দেওয়া উচিত। উদ্দেশ্যটি যদি ডিফারেনশিয়াল সমীকরণের একটি সিস্টেমকে সমাধান করা হয় তবে মনে হয় না যে একটি সম্পূর্ণ বিপরীতমুখী প্রয়োজন।
জারেড গোগুয়েন

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

1
এন

1
একজন

4

আপনার সম্ভবত এটি লক্ষ্য করা উচিত, নমপি উত্স কোডের অভ্যন্তরে গভীরভাবে কবর দেওয়া হয়েছে (দেখুন https://github.com/numpy/numpy/blob/master/numpy/linalg/umath_linalg.c.src ) ডেটেআরএফ ফাংশনটি কল করার জন্য আমন্ত্রণমূলক রুটিন প্রচেষ্টা আপনার সিস্টেম LAPACK প্যাকেজ থেকে, যা আপনার মূল ম্যাট্রিক্সের একটি LU পচন করে। এটি নৈতিকভাবে গাউসিয়ান নির্মূলের সমতুল্য, তবে উচ্চতর পারফরম্যান্স বিএলএএস-তে দ্রুত ম্যাট্রিক্সের গুণিত অ্যালগরিদম ব্যবহার করে কিছুটা কম জটিলতায় সুর করা যেতে পারে।

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

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