Python – Multiply two matrices



Python program to multiply two matrices

Given two matrix the task is that we will have to create a program to multiply two matrices in python.
Examples:

Input : X = [[1, 7, 3],
             [3, 5, 6],
             [6, 8, 9]]
       Y = [[1, 1, 1, 2],
           [6, 7, 3, 0],
           [4, 5, 9, 1]]
 
Output : [55, 65, 49, 5]
         [57, 68, 72, 12]
         [90, 107, 111, 21]

Using Simple Nested Loops 
In this program we have to use nested for loops to iterate through each row and each column.

# Program to multiply two matrices using nested loops
# take a 3x3 matrix
A = [[12, 7, 3],
    [4, 5, 6],
    [7, 8, 9]]
# take a 3x4 matrix   
B = [[5, 8, 1, 2],
    [6, 7, 3, 0],
    [4, 5, 9, 1]]
    
result = [[0, 0, 0, 0],
        [0, 0, 0, 0],
        [0, 0, 0, 0]]
# iterating by row of A
for i in range(len(A)):
    # iterating by column by B
    for j in range(len(B[0])):
        # iterating by rows of B
        for k in range(len(B)):
            result[i][j] += A[i][k] * B[k][j]
for r in result:
    print(r)

Output:

[114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23]

Method 2: Matrix Multiplication Using Nested List. We use zip in Python.

# Program to multiply two matrices using list comprehension
# take a 3x3 matrix
A = [[12, 7, 3],
    [4, 5, 6],
    [7, 8, 9]]
# take a 3x4 matrix
B = [[5, 8, 1, 2],
    [6, 7, 3, 0],
    [4, 5, 9, 1]]
# result will be 3x4
result = [[sum(a * b for a, b in zip(A_row, B_col))
                        for B_col in zip(*B)]
                                for A_row in A]
for r in result:
    print(r)

Output:

[114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23]

Method 3: Matrix Multiplication (Vectorized implementation).

# Program to multiply two matrices (vectorized implementation)
# Program to multiply two matrices (vectorized implementation)
import numpy as np
# take a 3x3 matrix
A = [[12, 7, 3],
    [4, 5, 6],
    [7, 8, 9]]
# take a 3x4 matrix
B = [[5, 8, 1, 2],
    [6, 7, 3, 0],
    [4, 5, 9, 1]]
# result will be 3x4
result= [[0,0,0,0],
        [0,0,0,0],
        [0,0,0,0]]
result = np.dot(A,B)
for r in result:
    print(r)

Output:

[114, 160, 60, 27]
[74, 97, 73, 14]
[119, 157, 112, 23]

 

 

Last Updated on October 28, 2021 by admin

Leave a Reply

Your email address will not be published. Required fields are marked *

Recommended Blogs