मॅट्रिक्स गुणाकार ही रेखीय बीजगणितातील मूलभूत क्रिया आहे.
आम्ही सामान्यतः इमेज प्रोसेसिंग, मशीन लर्निंग आणि बरेच काही यासारख्या असंख्य ऍप्लिकेशन्समध्ये वापरतो. NumPy हे वैज्ञानिक संगणनासाठी एक उल्लेखनीय पायथन पॅकेज आहे.
तथापि, या पोस्टमध्ये, आम्ही NumPy न वापरता पायथनमध्ये मॅट्रिक्स गुणाकार करण्याच्या विविध पद्धती पाहू.
आम्ही उपयोगात आणू नेस्टेड पळवाट, अंगभूत नकाशा() फंक्शन आणि सूची आकलन.
याशिवाय, आम्ही प्रत्येक रणनीतीचे फायदे आणि तोटे तसेच त्या प्रत्येकाला कधी लागू करायचे ते पाहू. जर तुम्ही रेखीय बीजगणितासाठी नवीन असाल आणि मॅट्रिक्स गुणाकाराबद्दल अधिक जाणून घेऊ इच्छित असाल; वाचत राहा.
आम्ही मॅट्रिक्स गुणाकार कुठे वापरू?
मध्ये मॅट्रिक्स गुणाकार वापरला जातो संगणक ग्राफिक्स 2D आणि 3D व्हिज्युअल बदलण्यासाठी. उदाहरणार्थ, तुम्ही स्क्रीनवर ऑब्जेक्ट्स फिरवू शकता, स्केल करू शकता आणि भाषांतर करू शकता. मॅट्रिक्सचा वापर इमेज प्रोसेसिंगमध्ये पिक्सेलच्या अॅरे म्हणून चित्रे दाखवण्यासाठी केला जातो. याशिवाय, इमेज फिल्टरिंग सारख्या ऑपरेशन्स करण्यासाठी मॅट्रिक्सचा वापर केला जाऊ शकतो.
मध्ये मॅट्रिक्स देखील वापरतो मशीन शिक्षण. डेटा आणि मॉडेल पॅरामीटर्सचे प्रतिनिधित्व करण्यात ते आम्हाला मदत करू शकतात. आम्ही असंख्य ऑपरेशन्स करू शकतो, जसे की कॉम्प्युटिंग डॉट उत्पादने आणि मॅट्रिक्स-वेक्टर उत्पादने.
निश्चितपणे, हे ऑपरेशन वैज्ञानिक ऑपरेशन्समध्ये देखील अत्यंत फायदेशीर आहे. भौतिक प्रमाणांचे वर्णन करण्यासाठी आपण ते भौतिकशास्त्र आणि अभियांत्रिकीमध्ये वापरू शकतो. म्हणून, आम्ही वेक्टर आणि टेन्सरसह कार्य करू शकतो.
आम्ही NumPy वापरणे का निवडू शकत नाही?
NumPy असताना ए पायथन लायब्ररी, मॅट्रिक्स गुणाकारासाठी हा नेहमीच आदर्श पर्याय नसतो. आकार आणि अवलंबित्व, शिक्षण आणि वारसा प्रणाली यासारख्या कारणांसाठी आम्ही NumPy वापरणे निवडू शकत नाही.
पायथनची अंगभूत फंक्शन्स वापरणे किंवा सानुकूल कोड विकसित करणे काही घटनांमध्ये अधिक कार्यक्षम असू शकते. तथापि, हे लक्षात घेणे महत्वाचे आहे की NumPy एक मजबूत लायब्ररी आहे. याशिवाय, तुम्ही ते मॅट्रिक्स गुणाकारासाठी देखील वापरू शकता.
आता, NumPy शिवाय आपण मॅट्रिक्स गुणाकार कसे मिळवू शकतो ते पाहू.
नेस्टेड लूप पद्धत
नेस्टेड लूप तंत्र पायथनमध्ये मॅट्रिक्स गुणाकार कार्यान्वित करण्यासाठी नेस्टेड लूप वापरते. फंक्शन प्रत्येक मॅट्रिक्स घटकावर पुनरावृत्ती होते. आणि, ते नेस्टेड लूपच्या मालिकेचा वापर करून त्यांचा गुणाकार करते. फंक्शन रिझल्ट परत करते, जे नवीन मॅट्रिक्समध्ये साठवले जाते.
हा दृष्टिकोन समजून घेण्यास सरळ आहे. तथापि, ते इतर मार्गांइतके कार्यक्षम असू शकत नाही, विशेषतः मोठ्या मॅट्रिक्ससाठी. तरीही, जर तुम्ही रेखीय बीजगणितासाठी नवीन असाल तर तुमच्यासाठी ही एक उत्तम निवड आहे.
def matrix_multiplication(A, B):
# Determine the matrices' dimensions.
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# परिणाम मॅट्रिक्स शून्य वर सेट करा.
result = [[0 for row in range(cols_B)] for col in
range(rows_A)]
# Iterate through rows of A
for s in range(rows_A):
# Iterate through columns of B
for j in range(cols_B):
# Iterate through rows of B
for k in range(cols_A):
result[s][j] += A[s][k] * B[k][j]
return result
हे कसे करायचे याचे उदाहरण घेऊ. या उदाहरणाची चाचणी घेण्यासाठी तुम्ही खालील कोडच्या या ओळी जोडू शकता.
# Sample matrices
A = [[1, 4, 3], [4, 9, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Perform matrix multiplication
result = matrix_multiplication(A, B)
# Print the result
print(result)
# Output: [[76, 84], [175, 194]]
फायदे:
- समजण्यास सोपे.
- नवशिक्यांसाठी किंवा मॅट्रिक्स गुणाकाराचे सखोल आकलन शोधणाऱ्यांसाठी उत्तम.
तोटे:
- पर्यायी तंत्रांइतके प्रभावी नाही, विशेषतः मोठ्या मॅट्रिक्ससाठी.
- ते पर्यायी पध्दतींइतके वाचनीय नाही.
नकाशा() फंक्शन पद्धत
मॅप() फंक्शन पद्धत पायथनमध्ये मॅट्रिक्स गुणाकार करण्यासाठी पर्यायी दृष्टीकोन प्रदान करते. या पद्धतीमध्ये, आम्ही बिल्ट-इन मॅप() फंक्शन वापरतो. म्हणून, आम्ही एक फंक्शनल प्रोग्रामिंग टूल वापरतो जे प्रत्येक पुनरावृत्ती घटक (सूची, ट्यूपल इ.) वर प्रदान केलेले कार्य लागू करते. तसेच, मॅप() फंक्शन दोन पॅरामीटर्स स्वीकारते, एक फंक्शन आणि एक पुनरावृत्ती. आणि, तो एक पुनरावृत्ती करणारा परत करतो जो प्रत्येक पुनरावृत्ती घटकाला फंक्शन लागू करतो.
या पद्धतीमध्ये, आम्ही मॅट्रिक्सच्या प्रत्येक सदस्यातून जातो आणि नेस्टेड नकाशा() फंक्शन वापरून गुणाकार करतो.
zip() फंक्शनचा वापर मॅट्रिक्सच्या प्रत्येक घटकाद्वारे समांतरपणे पुनरावृत्ती करण्यासाठी केला जातो.
शेवटी, sum() फंक्शन परिणाम जोडण्यासाठी वापरले जाते.
def matrix_multiplication(A, B):
# To get the dimensions of the matrices
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# We use map() function for multiplication.
result = [[sum(a * b for a, b in zip(row_a, col_b)) for
col_b in zip(*B)] for row_a in A]
return result
आता, पुन्हा, आम्ही आमच्या कोडची उदाहरणासह चाचणी करू शकतो.
# Example matrices
A = [[3, 2, 3], [4, 5, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Use map() function to perform matrix multiplication
result = list(map(lambda x: list(map(lambda y: sum(i*j
for i,j in zip(x,y)), zip(*B))), A))
# Print the result
print(result)
# Output: [[72, 80], [139, 154]]
फायदे
- स्टॅक केलेल्या लूपच्या दृष्टिकोनापेक्षा अधिक प्रभावी
- हे कोड सोपे करण्यासाठी फंक्शनल प्रोग्रामिंग वापरते.
तोटे
- फंक्शनल प्रोग्रामिंगशी परिचित नसलेल्या काही लोकांना ते कमी वाचनीय वाटू शकते.
- नेस्टेड लूप तंत्रापेक्षा हे कमी समजण्यासारखे आहे.
यादी आकलन पद्धत
सूची आकलन तुम्हाला कोडच्या एका ओळीत नवीन सूची तयार करण्यास सक्षम करते. म्हणून, हे विद्यमान सूचीतील प्रत्येक सदस्याला अभिव्यक्ती लागू करून आहे.
या दृष्टिकोनामध्ये, प्रत्येक मॅट्रिक्स सदस्याद्वारे वारंवार पुनरावृत्ती करून गुणाकार केला जातो. आम्ही स्तरित सूची आकलन वापरत आहोत.
# Sample matrices
A = [[1, 12, 3], [14, 5, 6]]
B = [[7, 8], [9, 10], [12, 12]]
# Matrix multiplication using list comprehension
result = [[sum(A[i][k] * B[k][j] for k in range(len(A[0])))
for j in range(len(B[0]))] for i in range(len(A))]
# Print the result
print(result)
[[151, 164], [215, 234]]
फायदे
- नकाशा() फंक्शन पद्धतीच्या तुलनेत, लहान आणि अधिक वाचनीय.
तोटे
- हे नकाशा() फंक्शन वापरण्यापेक्षा कमी प्रभावी असू शकते, विशेषतः मोठ्या मॅट्रिक्ससाठी.
- नेस्टेड लूपच्या दृष्टिकोनापेक्षा हे अधिक कठीण आहे.
निष्कर्ष
या पोस्टमध्ये, आम्ही पायथनमध्ये मॅट्रिक्सचा गुणाकार करताना NumPy वापरण्याचे पर्याय पाहिले. आम्ही नेस्टेड लूप, बिल्ट-इन मॅप() फंक्शन आणि लिस्ट कंप्रिहेन्शनमध्ये मॅट्रिक्स गुणाकार केले.
सर्वोत्तम धोरण आपल्या प्रकल्पाच्या विशिष्ट गरजांवर अवलंबून असेल.
प्रत्येक रणनीतीचे स्वतःचे फायदे आणि तोटे आहेत. फंक्शन योग्यरित्या कार्य करत आहे याची खात्री करण्यासाठी, विविध मॅट्रिक्स परिमाणे आणि मूल्यांसह काही चाचणी केस जोडणे चांगली कल्पना आहे.
या पद्धती किती चांगल्या प्रकारे कार्यान्वित करतात याची तुलना करण्यासाठी आपण काही कार्यप्रदर्शन चाचण्या देखील समाविष्ट केल्या पाहिजेत.
प्रत्युत्तर द्या