Code
import numpy as np
import scipy.sparse as sp
import scipy.sparse.linalg as spla
import time
N = 50000
np.random.seed(42)
B_dense = np.random.rand(N)
# Dense Matrix
A_dense = np.random.rand(N, N)
B_dense = np.random.rand(N)
start_time = time.time()
X_dense = np.linalg.solve(A_dense, B_dense)
dense_time = time.time() - start_time
# Sparse Matrix
diagonals = [
np.random.rand(N),
np.random.rand(N-1),
np.random.rand(N-1)
]
A_sparse = sp.diags(diagonals, offsets=[0, 1, -1], format='csr')
B_sparse = B_dense.copy()
start_time = time.time()
X_sparse = spla.spsolve(A_sparse, B_sparse)
sparse_time = time.time() - start_time
# Result
print(
{
"Dense Matrix": {"Time (s)": dense_time},
"Sparse Matrix": {"Time (s)": sparse_time},
}
)
Result
N=10000
{'Dense Matrix': {'Time (s)': 2.7376339435577393, 'Memory Usage (MB)': 29.343744000000015}, 'Sparse Matrix': {'Time (s)': 0.0051233768463134766, 'Memory Usage (MB)': 0.5529599999999846}}
N=50000
Memory Overflow! my 32GB Memory when it is dense.
{'Sparse Matrix': {'Time (s)': 0.024787425994873047}}
N=10000000
{'Sparse Matrix': {'Time (s)': 5.945250511169434}}