রৈখিক বীজগণিতে ম্যাট্রিক্স গুণন একটি মৌলিক ক্রিয়াকলাপ।
আমরা সাধারণত ইমেজ প্রসেসিং, মেশিন লার্নিং এবং আরও অনেক কিছুতে এটি ব্যবহার করি। 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]]
উপকারিতা:
- বোঝা সহজ.
- নতুনদের জন্য বা যারা ম্যাট্রিক্স গুণের গভীরতর বোঝার চেষ্টা করছেন তাদের জন্য দুর্দান্ত।
অসুবিধা:
- বিকল্প কৌশলগুলির মতো কার্যকর নয়, বিশেষ করে বড় ম্যাট্রিক্সের জন্য।
- এটি বিকল্প পন্থা হিসাবে পঠনযোগ্য নয়।
map() ফাংশন পদ্ধতি
ম্যাপ() ফাংশন পদ্ধতি পাইথনে ম্যাট্রিক্স গুণন করার জন্য একটি বিকল্প পদ্ধতি প্রদান করে। এই পদ্ধতিতে, আমরা বিল্ট-ইন ম্যাপ() ফাংশন ব্যবহার করি। তাই, আমরা একটি কার্যকরী প্রোগ্রামিং টুল ব্যবহার করি যা প্রতিটি পুনরাবৃত্তিযোগ্য উপাদানে (তালিকা, টিপল, ইত্যাদি) একটি প্রদত্ত ফাংশন প্রয়োগ করে। এছাড়াও, ম্যাপ() ফাংশন দুটি পরামিতি গ্রহণ করে, একটি ফাংশন এবং একটি পুনরাবৃত্তিযোগ্য। এবং, এটি একটি পুনরাবৃত্তিকারী প্রদান করে যা প্রতিটি পুনরাবৃত্তিযোগ্য উপাদানে ফাংশন প্রয়োগ করে।
এই পদ্ধতিতে, আমরা ম্যাট্রিক্সের প্রতিটি সদস্যের মধ্য দিয়ে যাই এবং নেস্টেড ম্যাপ() ফাংশন ব্যবহার করে গুণন করি।
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 ব্যবহার করার বিকল্পগুলি দেখেছি। আমরা নেস্টেড লুপ, অন্তর্নির্মিত মানচিত্র() ফাংশন এবং তালিকা বোঝার মধ্যে ম্যাট্রিক্স গুণন সম্পাদন করেছি।
সেরা কৌশল আপনার প্রকল্পের বিশেষ প্রয়োজনের উপর নির্ভর করবে।
প্রতিটি কৌশলের নিজস্ব সুবিধা এবং অসুবিধা রয়েছে। ফাংশনটি সঠিকভাবে কাজ করছে তা নিশ্চিত করতে, বিভিন্ন ম্যাট্রিক্স মাত্রা এবং মান সহ কিছু পরীক্ষার ক্ষেত্রে যোগ করা একটি ভাল ধারণা।
এই পদ্ধতিগুলি কতটা কার্যকর হয় তা তুলনা করার জন্য আপনাকে কিছু কর্মক্ষমতা পরীক্ষাও অন্তর্ভুক্ত করা উচিত।
নির্দেশিকা সমন্ধে মতামত দিন