مشخصات مقاله
-
0.0
-
1253
-
0
-
0
ضرب دو ماتریس در پایتون
در این آموزش، نحوه نوشتن یک برنامه پایتون برای ضرب دو ماتریس را مورد بحث قرار میدهیم. ما یک برنامه پایتون مینویسیم تا ضرب دو ماتریس ورودی را دریافت و نتیجه را در خروجی چاپ کند. این برنامه پایتون نشان میدهد چگونه دو ماتریس با مقادیر خاص را ضرب کنیم.
قبل از نوشتن برنامه پایتون، بیایید ابتدا یک نگاهی به مرور ضرب دو ماتریس بیندازیم.
ضرب ماتریس ها:
ضرب ماتریس عملی دودویی است که از یک زوج ماتریس برای تولید ماتریس دیگر استفاده میکند. در ضرب دو ماتریس، عناصر سطری از ماتریس اول با عناصر ستونی از ماتریس دوم ضرب میشوند. در ضرب ماتریس، مقدار سطری از ماتریس اول باید با مقدار ستونی از ماتریس دوم یکسان باشد. این به این معناست که اگر ماتریس اول ابعاد 3*3 داشته باشد، مقدار ستونی ماتریس دوم باید 3 باشد.
مثال: فرض کنید دو ماتریس A و B به شکل زیر داده شده باشد:A = [[5, 4, 3] [2, 4, 6] [4, 7, 9]] and, B = [[3, 2, 4] [4, 3, 6] [2, 7, 5]]C نتیجه جمع دو ماتریس فوق میباشد، یعنی C = A + B، و بنابراین ماتریس C باید به صورت زیر باشد:
C = [[5*3 + 4*4 + 3*2, 5*2 + 4*3 + 3*7, 5*4 + 4*6 + 3*5] [2*3 + 4*4 + 6*2, 2*2 + 4*3 + 6*7, 2*4 + 4*6 + 6*5] [4*3 + 7*4 + 9*2, 4*2 + 7*3 + 9*7, 4*4 + 7*6 + 9*5]] C = [[37, 43, 59] [34, 58, 62] [58, 92, 103]]
همانطور که مشاهده میشود، ماتریس حاصل C که به عنوان حاصلضرب ماتریس نیز شناخته میشود، تعداد سطرهای یکسانی با ماتریس اول (ماتریس A) و تعداد ستون های یکسانی با ماتریس دوم (ماتریس B) دارد. همچنین این نوع ضرب ماتریس را به عنوان ضرب نقطهای ماتریسها میشناسیم.
حالا ما یک برنامه پایتون برای ضرب دو ماتریس خواهیم نوشت که ضرب را در قالب مثال بالا انجام میدهد. ما میتوانیم از روشهای مختلفی برای نوشتن یک برنامه پایتون مانند این استفاده کنیم، اما در این آموزش تنها از دو روش زیر استفاده خواهیم کرد:
- ۱. استفاده از روش حلقههای تو در تو (nested for loop)
- ۲. استفاده از روش تشکیل لیست درونی (nested list comprehension)
در هر دو روش، یک برنامه نمونه را خواهیم نوشت تا پیادهسازی آنها برای ضرب دو ماتریس را درک کنیم.
روش ۱: استفاده از روش حلقههای تو در تو (nested for loop):
در این روش، قصد داریم از حلقههای تو در تو روی دو ماتریس استفاده کنیم و ضرب را روی آنها انجام دهیم و نتیجه ضرب را در ماتریس سوم به عنوان مقدار نتیجه ذخیره کنیم. بیایید این روش را از طریق انجام مثال زیر درک کنیم.
# Matrix multiplication using nested for loop # Initialize the value of A and B matrix A = [[5, 4, 3], [2, 4, 6], [4, 7, 9]] B = [[3, 2, 4], [4, 3, 6], [2, 7, 5]] # Define an empty matrix to store multiplication result multiResult = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] # Using nested for loop method on A & B matrix for m in range(len(A)): for n in range(len(B[0])): for o in range(len(B)): multiResult[m][n] += A[m][o] * B[o][n] # Storing multiplication result in empty matrix # Printing multiplication result in the output print("The multiplication result of matrix A and B is: ") for res in multiResult: print(res)خروجی
The multiplication result of matrix A and B is: [37, 43, 59] [34, 58, 62] [58, 92, 103]مثال
# Matrix multiplication using nested for loop # Initialize the value of the a and b matrix a = [[1,2,3], [4,5,6], [7,8,9]] b = [[0,0,1], [0,1,0], [1,0,0]] res = [[0,0,0], [0,0,0], [0,0,0]] for i in range(len(a)): for j in range(len(b[0])): for k in range(len(b)): res[i][j] += a[i][k] * b[k][j] for r in res: print(r)خروجی
[3, 2, 1] [6, 5, 4] [9, 8, 7]
روش ۲: استفاده از روش تشکیل لیست درونی (nested list comprehension):
در این روش، از تشکیل لیست درونی برای به دست آوردن نتیجه ضرب دو ماتریس ورودی استفاده خواهیم کرد. در حین استفاده از روش تشکیل لیست در برنامه، همچنین zip in Python را در لیست درونی استفاده خواهیم کرد. بیایید پیادهسازی این روش را از طریق مثال زیر درک کنیم.
# Matrix multiplication using nested for loop # Initialize the value of the A and B matrix A = [[1,2,3], [4,5,6], [7 ,8,9]] B = [[0,0,1], [0,1,0], [1,0,0]] # Using nested list method with zip in Python multiResult = [[sum(a * b for a, b in zip(Arow, Bcol)) for Bcol in zip(*B)] for Arow in A] # Printing multiplication result in the output print("The multiplication result of matrix A and B is: ") for res in multiResult: print(res)خروجی
The multiplication result of matrix A and B is: [3, 2, 1] [6, 5, 4] [9, 8, 7]
نظرات شما