Compare inv and solve functions

November 7, 2022

Solve equation A*x=b for x and compare results using the np.linalg.solve() function to the np.linalg.inv() approach.

import numpy as np
from time import perf_counter

# Check results
# ----------------------------------------------------------------------------

a = np.random.rand(4, 4)
b = np.random.rand(4)

x = np.linalg.solve(a, b)
print('x', x)

x = np.linalg.inv(a) @ b
print('x', x)

# Elapsed time
# ----------------------------------------------------------------------------

n = 5000

a = np.random.rand(n, n)
b = np.random.rand(n)

tic = perf_counter()
x = np.linalg.solve(a, b)
toc = perf_counter()
print(f'Elapsed time for .solve is {toc - tic:.2f} s')

tic = perf_counter()
x = np.linalg.inv(a) @ b
toc = perf_counter()
print(f'Elapsed time for .inv is {toc - tic:.2f} s')

The output shown below is from running the example on a MacBook Pro. Using np.linalg.solve() is noticeably faster (especially for large arrays) than using the inverse matrix approach.

x [-19.96400793 6.3753703 -8.27713073 35.08957403]
x [-19.96400793 6.3753703 -8.27713073 35.08957403]
Elapsed time for .solve is 0.98 s
Elapsed time for .inv is 3.47 s