میٹرکس ضرب لکیری الجبرا میں ایک بنیادی عمل ہے۔
ہم اسے عام طور پر متعدد ایپلی کیشنز میں استعمال کرتے ہیں جیسے امیج پروسیسنگ، مشین لرننگ، اور بہت کچھ۔ NumPy سائنسی کمپیوٹنگ کے لیے ایک قابل ذکر ازگر پیکج ہے۔
تاہم، اس پوسٹ میں، ہم NumPy کو استعمال کیے بغیر Python میں میٹرکس ضرب کرنے کے مختلف طریقوں کو دیکھیں گے۔
ہم استعمال کریں گے۔ گھوںسلا لوپس، بلٹ ان map() فنکشن، اور فہرست کی سمجھ۔
اس کے علاوہ، ہم ہر حکمت عملی کے فوائد اور نقصانات کے ساتھ ساتھ ان میں سے ہر ایک کو کب لاگو کرنا ہے اس پر بھی غور کریں گے۔ اگر آپ لکیری الجبرا میں نئے ہیں اور میٹرکس ضرب کے بارے میں مزید جاننا چاہتے ہیں؛ پڑھتے رہیں.
ہم میٹرکس ضرب کہاں استعمال کرتے ہیں؟
میٹرکس ضرب میں استعمال ہوتا ہے۔ کمپیوٹر گرافکس 2D اور 3D بصری کو تبدیل کرنے کے لیے۔ مثال کے طور پر، آپ اسکرین پر اشیاء کو گھما سکتے ہیں، اسکیل کر سکتے ہیں اور ان کا ترجمہ کر سکتے ہیں۔ میٹرکس کو تصویری پروسیسنگ میں پکسلز کی صفوں کے طور پر تصویروں کی نمائندگی کرنے کے لیے استعمال کیا جاتا ہے۔ اس کے علاوہ، میٹرکس کا استعمال امیج فلٹرنگ جیسی کارروائیوں کے لیے کیا جا سکتا ہے۔
ہم اس میں میٹرکس کا بھی استعمال کرتے ہیں۔ مشین لرننگ. وہ ڈیٹا اور ماڈل پیرامیٹرز کی نمائندگی کرنے میں ہماری مدد کر سکتے ہیں۔ ہم متعدد آپریشنز کر سکتے ہیں، جیسے کمپیوٹنگ ڈاٹ پروڈکٹس اور میٹرکس ویکٹر پروڈکٹس۔
یقیناً یہ آپریشن سائنسی کارروائیوں میں بھی انتہائی فائدہ مند ہے۔ ہم اسے فزکس اور انجینئرنگ میں جسمانی مقداروں کو بیان کرنے کے لیے استعمال کر سکتے ہیں۔ لہذا، ہم ویکٹر اور ٹینسر کے ساتھ کام کر سکتے ہیں۔
ہم NumPy استعمال کرنے کا انتخاب کیوں نہیں کر سکتے ہیں؟
جبکہ NumPy ایک ہے۔ ازگر کی لائبریریمیٹرکس ضرب کے لیے یہ ہمیشہ مثالی آپشن نہیں ہوتا ہے۔ ہم سائز اور انحصار، سیکھنے، اور میراثی نظام جیسی وجوہات کی بنا پر NumPy استعمال کرنے کا انتخاب نہیں کر سکتے۔
Python کے بلٹ ان فنکشنز کا استعمال کرنا یا اپنی مرضی کے کوڈ کو تیار کرنا کچھ مثالوں میں زیادہ کارآمد ہو سکتا ہے۔ تاہم، یہ نوٹ کرنا بہت ضروری ہے کہ 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() فنکشن استعمال کرتے ہیں۔ لہذا، ہم ایک فنکشنل پروگرامنگ ٹول استعمال کرتے ہیں جو ہر قابل تکرار عنصر (فہرست، ٹوپل، وغیرہ) پر فراہم کردہ فنکشن کا اطلاق کرتا ہے۔ نیز، نقشہ() فنکشن دو پیرامیٹرز کو قبول کرتا ہے، ایک فنکشن اور ایک قابل تکرار۔ اور، یہ ایک تکرار کرنے والا لوٹاتا ہے جو ہر قابل تکرار عنصر پر فنکشن کا اطلاق کرتا ہے۔
اس نقطہ نظر میں، ہم میٹرکس کے ہر رکن سے گزرتے ہیں اور nested 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]]
فوائد
- نقشہ () فنکشن طریقہ کے مقابلے میں، چھوٹا اور زیادہ پڑھنے کے قابل۔
خامیاں
- یہ نقشہ () فنکشن استعمال کرنے سے کم موثر ہو سکتا ہے، خاص طور پر بڑے میٹرکس کے لیے۔
- یہ نیسٹڈ لوپس اپروچ سے زیادہ مشکل ہے۔
نتیجہ
اس پوسٹ میں، ہم نے Python میں میٹرکس کو ضرب کرتے وقت NumPy استعمال کرنے کے متبادل کو دیکھا۔ ہم نے نیسٹڈ لوپس، بلٹ ان میپ() فنکشن، اور فہرست کی سمجھ میں میٹرکس ضرب کاری کی۔
بہترین حکمت عملی آپ کے پروجیکٹ کی مخصوص ضروریات پر انحصار کرے گی۔
حکمت عملی میں سے ہر ایک کے اپنے فوائد اور نقصانات ہیں۔ اس بات کو یقینی بنانے کے لیے کہ فنکشن صحیح طریقے سے کام کر رہا ہے، مختلف میٹرکس کے طول و عرض اور اقدار کے ساتھ کچھ ٹیسٹ کیسز شامل کرنا اچھا خیال ہے۔
آپ کو کارکردگی کے کچھ ٹیسٹ بھی شامل کرنے چاہئیں تاکہ یہ موازنہ کیا جا سکے کہ یہ طریقے کتنے اچھے طریقے سے انجام پاتے ہیں۔
جواب دیجئے