पायथन: वेक्टर, मैट्रिसेस और एरेज़ न्यूमपी के साथ

Python Vectors Matrices



इस पाठ में, हम पायथन में NumPy लाइब्रेरी का उपयोग करके वैक्टर, मैट्रिसेस और सरणियों के साथ खेलने के लिए कुछ साफ-सुथरी युक्तियों और युक्तियों को देखेंगे। यह पाठ एक बहुत अच्छा प्रारंभिक बिंदु है यदि आप डेटा विज्ञान में शुरुआत कर रहे हैं और इन घटकों के कुछ प्रारंभिक गणितीय अवलोकन की आवश्यकता है और हम कोड में NumPy का उपयोग करके उनके साथ कैसे खेल सकते हैं।

NumPy लाइब्रेरी हमें विभिन्न ऑपरेशन करने की अनुमति देती है जिसे अक्सर मशीन लर्निंग और डेटा साइंस जैसे वैक्टर, मैट्रिस और एरेज़ में उपयोग की जाने वाली डेटा संरचनाओं पर करने की आवश्यकता होती है। हम केवल NumPy के साथ सबसे सामान्य संचालन दिखाएंगे जो बहुत सारी मशीन लर्निंग पाइपलाइनों में उपयोग किए जाते हैं। अंत में, कृपया ध्यान दें कि NumPy केवल संचालन करने का एक तरीका है, इसलिए, हम जो गणितीय संचालन दिखाते हैं, वह इस पाठ का मुख्य फोकस है, न कि स्वयं NumPy पैकेज। आएँ शुरू करें।







एक वेक्टर क्या है?

Google के अनुसार, एक वेक्टर एक मात्रा है जिसमें दिशा और साथ ही परिमाण होता है, विशेष रूप से दूसरे के सापेक्ष अंतरिक्ष में एक बिंदु की स्थिति निर्धारित करने के रूप में।





मशीन लर्निंग में वेक्टर बहुत महत्वपूर्ण हैं क्योंकि वे न केवल परिमाण का वर्णन करते हैं बल्कि सुविधाओं की दिशा का भी वर्णन करते हैं। हम निम्नलिखित कोड स्निपेट के साथ NumPy में एक वेक्टर बना सकते हैं:





आयात सुन्नजैसाउदाहरण के लिए:

row_vector = np.array([1,2,3])
प्रिंट(पंक्ति_वेक्टर)

उपरोक्त कोड स्निपेट में, हमने एक पंक्ति वेक्टर बनाया है। हम एक कॉलम वेक्टर भी बना सकते हैं:

आयात सुन्नजैसाउदाहरण के लिए:

col_vector = np.array([[1],[2],[3]])
प्रिंट(col_vector)

एक मैट्रिक्स बनाना

एक मैट्रिक्स को केवल दो-आयामी सरणी के रूप में समझा जा सकता है। हम बहु-आयामी सरणी बनाकर NumPy के साथ एक मैट्रिक्स बना सकते हैं:



मैट्रिक्स = एनपी.सरणी([[1,2,3],[4,5,6],[7,8,9]])
प्रिंट(आव्यूह)

हालांकि मैट्रिक्स बहु-आयामी सरणी के समान है, मैट्रिक्स डेटा संरचना अनुशंसित नहीं है दो कारणों से:

  1. जब NumPy पैकेज की बात आती है तो सरणी मानक होती है
  2. NumPy के साथ अधिकांश ऑपरेशन सरणी लौटाते हैं और मैट्रिक्स नहीं

विरल मैट्रिक्स का उपयोग करना

याद दिलाने के लिए, एक विरल मैट्रिक्स वह होता है जिसमें अधिकांश आइटम शून्य होते हैं। अब, डेटा प्रोसेसिंग और मशीन लर्निंग में एक सामान्य परिदृश्य मैट्रिसेस को संसाधित करना है जिसमें अधिकांश तत्व शून्य हैं। उदाहरण के लिए, एक मैट्रिक्स पर विचार करें जिसकी पंक्तियाँ Youtube पर प्रत्येक वीडियो का वर्णन करती हैं और कॉलम प्रत्येक पंजीकृत उपयोगकर्ता का प्रतिनिधित्व करते हैं। प्रत्येक मान दर्शाता है कि उपयोगकर्ता ने कोई वीडियो देखा है या नहीं। बेशक, इस मैट्रिक्स में अधिकांश मान शून्य होंगे। NS विरल मैट्रिक्स के साथ लाभ यह है कि यह उन मानों को संग्रहीत नहीं करता है जो शून्य हैं। इसके परिणामस्वरूप एक बड़ा कम्प्यूटेशनल लाभ और भंडारण अनुकूलन भी होता है।

आइए यहां एक स्पार्क मैट्रिक्स बनाएं:

scipy आयात विरल से

मूल_मैट्रिक्स = एनपी.सरणी([[1,0,3],[0,0,6],[7,0,0]])
sparse_matrix = sparse.csr_matrix(मूल_मैट्रिक्स)
प्रिंट(विरल मैट्रिक्स)

यह समझने के लिए कि कोड कैसे काम करता है, हम यहां आउटपुट देखेंगे:

उपरोक्त कोड में, हमने a . बनाने के लिए NumPy के फ़ंक्शन का उपयोग किया है संकुचित विरल पंक्ति मैट्रिक्स जहां शून्य-आधारित अनुक्रमणिका का उपयोग करके गैर-शून्य तत्वों का प्रतिनिधित्व किया जाता है। विरल मैट्रिक्स कई प्रकार के होते हैं, जैसे:

  • संकुचित विरल स्तंभ
  • सूचियों की सूची
  • चाबियों का शब्दकोश

हम यहां अन्य विरल मैट्रिक्स में गोता नहीं लगाएंगे, लेकिन जानते हैं कि उनका प्रत्येक उपयोग विशिष्ट है और किसी को भी 'सर्वश्रेष्ठ' नहीं कहा जा सकता है।

सभी वेक्टर तत्वों पर संचालन लागू करना

यह एक सामान्य परिदृश्य है जब हमें कई वेक्टर तत्वों के लिए एक सामान्य ऑपरेशन लागू करने की आवश्यकता होती है। यह एक लैम्ब्डा को परिभाषित करके और फिर उसी को वेक्टर करके किया जा सकता है। आइए उसी के लिए कुछ कोड स्निपेट देखें:

मैट्रिक्स = एनपी.सरणी([
[1,2,3],
[4,5,6],
[7,8,9]])

mul_5 = लैम्ब्डा x: x* 5
vectorized_mul_5 = np.vectorize(मूल_5)

वेक्टरकृत_mul_5(आव्यूह)

यह समझने के लिए कि कोड कैसे काम करता है, हम यहां आउटपुट देखेंगे:

उपरोक्त कोड स्निपेट में, हमने एक साधारण लैम्ब्डा परिभाषा को एक फ़ंक्शन में बदलने के लिए वेक्टराइज़ फ़ंक्शन का उपयोग किया, जो कि NumPy लाइब्रेरी का हिस्सा है, जो वेक्टर के प्रत्येक तत्व को संसाधित कर सकता है। यह ध्यान रखना महत्वपूर्ण है कि वेक्टराइज़ है तत्वों पर सिर्फ एक पाश और इसका कार्यक्रम के प्रदर्शन पर कोई प्रभाव नहीं पड़ता है। NumPy भी अनुमति देता है प्रसारण , जिसका अर्थ है कि उपरोक्त जटिल कोड के बजाय, हम बस कर सकते थे:

आव्यूह* 5

और नतीजा बिल्कुल वैसा ही होता। मैं पहले जटिल भाग दिखाना चाहता था, अन्यथा आप अनुभाग को छोड़ देते!

माध्य, प्रसरण और मानक विचलन

NumPy के साथ, वैक्टर पर वर्णनात्मक आँकड़ों से संबंधित संचालन करना आसान है। एक वेक्टर के माध्य की गणना इस प्रकार की जा सकती है:

एनपी.मतलब(आव्यूह)

एक वेक्टर के प्रसरण की गणना इस प्रकार की जा सकती है:

एनपी.वर(आव्यूह)

एक वेक्टर के मानक विचलन की गणना इस प्रकार की जा सकती है:

जैसे एसटीडी(आव्यूह)

दिए गए मैट्रिक्स पर उपरोक्त कमांड का आउटपुट यहां दिया गया है:

एक मैट्रिक्स ट्रांसपोज़िंग

ट्रांसपोज़िंग एक बहुत ही सामान्य ऑपरेशन है जिसके बारे में आप तब भी सुनेंगे जब आप मैट्रिक्स से घिरे होंगे। ट्रांसपोज़िंग एक मैट्रिक्स के स्तंभ और पंक्ति मानों को स्वैप करने का एक तरीका है। कृपया ध्यान दें कि ए वेक्टर को स्थानांतरित नहीं किया जा सकता है एक वेक्टर के रूप में उन मानों को पंक्तियों और स्तंभों में वर्गीकृत किए बिना मूल्यों का एक संग्रह है। कृपया ध्यान दें कि एक पंक्ति वेक्टर को एक कॉलम वेक्टर में परिवर्तित करना ट्रांसपोज़िंग नहीं है (रैखिक बीजगणित की परिभाषाओं के आधार पर, जो इस पाठ के दायरे से बाहर है)।

अभी के लिए, हम केवल एक मैट्रिक्स को स्थानांतरित करके शांति पाएंगे। NumPy के साथ मैट्रिक्स के स्थानान्तरण को एक्सेस करना बहुत आसान है:

मैट्रिक्स.टी

दिए गए मैट्रिक्स पर उपरोक्त कमांड का आउटपुट यहां दिया गया है:

एक कॉलम वेक्टर में बदलने के लिए एक पंक्ति वेक्टर पर एक ही ऑपरेशन किया जा सकता है।

एक मैट्रिक्स को समतल करना

यदि हम इसके तत्वों को रैखिक रूप से संसाधित करना चाहते हैं तो हम एक मैट्रिक्स को एक-आयामी सरणी में परिवर्तित कर सकते हैं। यह निम्नलिखित कोड स्निपेट के साथ किया जा सकता है:

मैट्रिक्स.चपटा()

दिए गए मैट्रिक्स पर उपरोक्त कमांड का आउटपुट यहां दिया गया है:

ध्यान दें कि समतल मैट्रिक्स एक आयामी सरणी है, जो फैशन में केवल रैखिक है।

Eigenvalues ​​​​और Eigenvectors की गणना करना

मशीन लर्निंग पैकेज में Eigenvectors का आमतौर पर उपयोग किया जाता है। इसलिए, जब एक रैखिक परिवर्तन फ़ंक्शन को मैट्रिक्स के रूप में प्रस्तुत किया जाता है, तो एक्स, आइजेनवेक्टर वे वैक्टर होते हैं जो केवल वेक्टर के पैमाने में बदलते हैं, लेकिन इसकी दिशा में नहीं। हम कह सकते हैं कि:

एक्सवी = वी

यहाँ, X वर्ग आव्यूह है और में eigenvalues ​​हैं। साथ ही, v में Eigenvectors शामिल हैं। NumPy के साथ, Eigenvalues ​​​​और Eigenvectors की गणना करना आसान है। यहां कोड स्निपेट है जहां हम इसे प्रदर्शित करते हैं:

evalues, evectors = np.linalg.eig(आव्यूह)

दिए गए मैट्रिक्स पर उपरोक्त कमांड का आउटपुट यहां दिया गया है:

वेक्टर के डॉट उत्पाद

वेक्टर के डॉट उत्पाद 2 वैक्टर को गुणा करने का एक तरीका है। यह आपको के बारे में बताता है कितने सदिश एक ही दिशा में हैं , क्रॉस उत्पाद के विपरीत जो आपको विपरीत बताता है, वैक्टर एक ही दिशा में कितने कम हैं (जिसे ऑर्थोगोनल कहा जाता है)। हम यहां कोड स्निपेट में दिए गए अनुसार दो वैक्टर के डॉट उत्पाद की गणना कर सकते हैं:

ए = एनपी.सरणी([3,5,6])
बी = एनपी.सरणी([2. 3,पंद्रह,1])

एनपी.डॉट(ए, बी)

दिए गए सरणियों पर उपरोक्त कमांड का आउटपुट यहाँ दिया गया है:

मैट्रिक्स जोड़ना, घटाना और गुणा करना

मैट्रिसेस में कई मैट्रिसेस को जोड़ना और घटाना काफी सीधा ऑपरेशन है। ऐसा करने के दो तरीके हैं। आइए इन कार्यों को करने के लिए कोड स्निपेट देखें। इसे सरल रखने के उद्देश्य से, हम एक ही मैट्रिक्स का दो बार उपयोग करेंगे:

एनपी.जोड़(मैट्रिक्स, मैट्रिक्स)

इसके बाद, दो आव्यूहों को इस प्रकार घटाया जा सकता है:

एनपी.घटाना(मैट्रिक्स, मैट्रिक्स)

दिए गए मैट्रिक्स पर उपरोक्त कमांड का आउटपुट यहां दिया गया है:

जैसा कि अपेक्षित था, मैट्रिक्स में प्रत्येक तत्व को संबंधित तत्व के साथ जोड़ा/घटाया जाता है। मैट्रिक्स को गुणा करना डॉट उत्पाद को खोजने के समान है जैसा हमने पहले किया था:

एनपी.डॉट(मैट्रिक्स, मैट्रिक्स)

उपरोक्त कोड को दो मैट्रिक्स का सही गुणन मान मिलेगा, जो इस प्रकार दिया गया है:

आव्यूह*आव्यूह

दिए गए मैट्रिक्स पर उपरोक्त कमांड का आउटपुट यहां दिया गया है:

निष्कर्ष

इस पाठ में, हमने वेक्टर, मैट्रिसेस और एरेज़ से संबंधित बहुत सारे गणितीय कार्यों का अध्ययन किया, जो आमतौर पर डेटा प्रोसेसिंग, वर्णनात्मक सांख्यिकी और डेटा विज्ञान का उपयोग किया जाता है। यह एक त्वरित पाठ था जिसमें विभिन्न प्रकार की अवधारणाओं के केवल सबसे सामान्य और सबसे महत्वपूर्ण वर्गों को शामिल किया गया था, लेकिन इन ऑपरेशनों को इस बारे में एक बहुत अच्छा विचार देना चाहिए कि इन डेटा संरचनाओं से निपटने के दौरान सभी ऑपरेशन क्या किए जा सकते हैं।

कृपया ट्विटर पर पाठ के बारे में स्वतंत्र रूप से अपनी प्रतिक्रिया साझा करें @linuxhint तथा @sbmaggarwal (वह मैं हूं!)।