Python Program to multiply two matrices
Last Updated :
24 Feb, 2022
Given two matrices, the task to multiply them. Matrices can either be square or rectangular.
Examples:
Input : mat1[][] = {{1, 2},
{3, 4}}
mat2[][] = {{1, 1},
{1, 1}}
Output : {{3, 3},
{7, 7}}
Input : mat1[][] = {{2, 4},
{3, 4}}
mat2[][] = {{1, 2},
{1, 3}}
Output : {{6, 16},
{7, 18}}
Multiplication of Square Matrices :
The below program multiplies two square matrices of size 4*4, we can change N for different dimensions.
Python3
def matrix_multiplication(M, N):
R = [[ 0 , 0 , 0 , 0 ],
[ 0 , 0 , 0 , 0 ],
[ 0 , 0 , 0 , 0 ],
[ 0 , 0 , 0 , 0 ]]
for i in range ( 0 , 4 ):
for j in range ( 0 , 4 ):
for k in range ( 0 , 4 ):
R[i][j] + = M[i][k] * N[k][j]
for i in range ( 0 , 4 ):
for j in range ( 0 , 4 ):
print (R[i][j], end = " " )
print ("
", end =" ")
M = [[ 1 , 1 , 1 , 1 ],
[ 2 , 2 , 2 , 2 ],
[ 3 , 3 , 3 , 3 ],
[ 4 , 4 , 4 , 4 ]]
N = [[ 1 , 1 , 1 , 1 ],
[ 2 , 2 , 2 , 2 ],
[ 3 , 3 , 3 , 3 ],
[ 4 , 4 , 4 , 4 ]]
matrix_multiplication(M, N)
|
Output
Result matrix is
10 10 10 10
20 20 20 20
30 30 30 30
40 40 40 40
Time complexity: O(n3). It can be optimized using Strassen’s Matrix Multiplication
Auxiliary Space: O(n2)
Multiplication of Rectangular Matrices :
We use pointers in C to multiply to matrices. Please refer to the following post as a prerequisite of the code.
How to pass a 2D array as a parameter in C?
Python3
def multiply(m1, m2, mat1,
n1, n2, mat2):
res = [[ 0 for x in range (n2)]
for y in range (m1)]
for i in range (m1):
for j in range (n2):
res[i][j] = 0
for x in range (m2):
res[i][j] + = (mat1[ i][x] *
mat2[ x][j])
for i in range (m1):
for j in range (n2):
print (res[i][j],
end = " " )
print ()
if __name__ = = "__main__" :
mat1 = [[ 2 , 4 ], [ 3 , 4 ]]
mat2 = [[ 1 , 2 ], [ 1 , 3 ]]
m1, m2, n1, n2 = 2 , 2 , 2 , 2
multiply(m1, m2, mat1,
n1, n2, mat2)
|
Time complexity: O(n3). It can be optimized using Strassen’s Matrix Multiplication
Auxiliary Space: O(m1 * n2)
Please refer complete article on Program to multiply two matrices for more details!
Share your thoughts in the comments
Please Login to comment...