69.2k views
5 votes
Write a naive implementation (i.e. non-vectorized) of matrix multiplication, and then write an efficient implementation that utilizes Numpy's vectorization. When writing the function ensure that the matrix dimensions are correct (print the message Wrong dimensions! otherwise).

User Vitvly
by
8.0k points

1 Answer

4 votes

Answer:

import numpy as np

import time

def matrixMul(m1,m2):

if m1.shape[1] == m2.shape[0]:

t1 = time.time()

r1 = np.zeros((m1.shape[0],m2.shape[1]))

for i in range(m1.shape[0]):

for j in range(m2.shape[1]):

r1[i,j] = (m1[i]*m2.transpose()[j]).sum()

t2 = time.time()

print("Native implementation: ",r1)

print("Time: ",t2-t1)

t1 = time.time()

r2 = m1.dot(m2)

t2 = time.time()

print("\\Efficient implementation: ",r2)

print("Time: ",t2-t1)

else:

print("Wrong dimensions!")

Step-by-step explanation:

We define a function (matrixMul) that receive two arrays representing the two matrices to be multiplied, then we verify is the dimensions are appropriated for matrix multiplication if so we proceed with the native implementation consisting of two for-loops and prints the result of the operation and the execution time, then we proceed with the efficient implementation using .dot method then we return the result with the operation time. As you can see from the image the execution time is appreciable just for large matrices, in such a case the execution time of the efficient implementation can be 1000 times faster than the native implementation.

Write a naive implementation (i.e. non-vectorized) of matrix multiplication, and then-example-1
Write a naive implementation (i.e. non-vectorized) of matrix multiplication, and then-example-2
Write a naive implementation (i.e. non-vectorized) of matrix multiplication, and then-example-3
User Yogurt The Wise
by
8.4k points