Create and operate on a large Sparse matrix using SciPy's Sparse module
NumPy: Integration with SciPy Exercise-10 with Solution
Write a NumPy program to create a large sparse matrix and perform sparse matrix operations using SciPy's sparse module.
Sample Solution:
Python Code:
import numpy as np # Import NumPy library
from scipy.sparse import csr_matrix, csc_matrix, coo_matrix # Import sparse matrix types
from scipy.sparse import random # Import random for creating sparse matrices
# Create a large sparse matrix using SciPy's random function
rows = 1000
cols = 1000
density = 0.01 # 1% of the matrix will be non-zero
sparse_matrix = random(rows, cols, density=density, format='csr', dtype=np.float64)
# Perform sparse matrix operations
# 1. Convert to different sparse matrix formats
csr_sparse = sparse_matrix.tocsr() # Compressed Sparse Row format
csc_sparse = sparse_matrix.tocsc() # Compressed Sparse Column format
coo_sparse = sparse_matrix.tocoo() # Coordinate format
# 2. Perform matrix-vector multiplication
vector = np.random.rand(cols)
result_vector = csr_sparse.dot(vector)
# 3. Compute the transpose of the sparse matrix
transpose_sparse = csr_sparse.transpose()
# 4. Sum the elements of the sparse matrix
sum_elements = csr_sparse.sum()
# Print the results
print("Original Sparse Matrix (CSR format):")
print(csr_sparse)
print("\nConverted to CSC format:")
print(csc_sparse)
print("\nConverted to COO format:")
print(coo_sparse)
print("\nResult of Matrix-Vector Multiplication:")
print(result_vector)
print("\nTranspose of the Sparse Matrix:")
print(transpose_sparse)
print("\nSum of All Elements in the Sparse Matrix:")
print(sum_elements)
Output:
Original Sparse Matrix (CSR format): (0, 120) 0.21471827882142103 (0, 123) 0.9714321590722751 (0, 191) 0.6004892254255279 (0, 394) 0.7671482169838781 (0, 700) 0.4422269471655804 ----------------------------------------- ----------------------------------------- (999, 397) 0.7854764556001641 (999, 466) 0.5550121109953703 (999, 511) 0.5997696356941709 (999, 795) 0.225460003687874 (999, 903) 0.0521806689562736 (999, 961) 0.3517484093330441 Converted to CSC format: (14, 0) 0.45502582264034097 (19, 0) 0.6080508480019577 (61, 0) 0.6239838568531525 ------------------------------------------ ------------------------------------------- (788, 999) 0.9429382947151952 (833, 999) 0.9408655523685188 (900, 999) 0.939157701497818 (905, 999) 0.8199442453334406 Converted to COO format: (0, 120) 0.21471827882142103 (0, 123) 0.9714321590722751 (0, 191) 0.6004892254255279 (0, 394) 0.7671482169838781 (0, 700) 0.4422269471655804 (0, 740) 0.49057244031907976 ------------------------------------------ ------------------------------------------ (999, 466) 0.5550121109953703 (999, 511) 0.5997696356941709 (999, 795) 0.225460003687874 (999, 903) 0.0521806689562736 (999, 961) 0.3517484093330441 Result of Matrix-Vector Multiplication: [1.83219136 2.28026586 1.27514428 2.80244535 2.39462724 1.55893569 1.21429974 3.64629258 1.8729332 2.62204268 1.96195769 3.1483823 2.15159565 1.61667861 1.86943874 1.4542032 3.41904755 2.6786697 3.46855777 2.12098727 4.86558616 3.77960467 3.66170561 3.75764315 1.39623894 2.55277811 1.31363469 1.75971283 3.49846573 3.63125698 3.66404111 2.10773362 2.16817706 2.90085879 0.57371095 1.75962388 -------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- 1.51183919 2.52489521 1.49451129 3.8189812 1.97376929 3.11842007 1.76878761 2.35815012 2.37133228 4.16304991 2.55236607 4.03507708 2.22023204 3.39838637 2.19385471 3.10879186 2.63835139 2.2193123 2.39662796 2.00121437 1.99674452 2.02487001] Transpose of the Sparse Matrix: (120, 0) 0.21471827882142103 (123, 0) 0.9714321590722751 (191, 0) 0.6004892254255279 (394, 0) 0.7671482169838781 (700, 0) 0.4422269471655804 ---------------------------------------- ---------------------------------------- (397, 999) 0.7854764556001641 (466, 999) 0.5550121109953703 (511, 999) 0.5997696356941709 (795, 999) 0.225460003687874 (903, 999) 0.0521806689562736 (961, 999) 0.3517484093330441 Sum of All Elements in the Sparse Matrix: 4997.750713886418
Explanation:
- Import Libraries:
- Import the necessary libraries: NumPy for array creation and manipulation, and SciPy's sparse module for handling sparse matrices.
- Create Sparse Matrix:
- Define the dimensions (rows and columns) and density (percentage of non-zero elements) for the sparse matrix.
- Use scipy.sparse.random() to create a large sparse matrix in Compressed Sparse Row (CSR) format.
- Convert to Different Sparse Matrix Formats:
- Convert the CSR sparse matrix to Compressed Sparse Column (CSC) and Coordinate (COO) formats using .tocsc() and .tocoo() methods.
- Perform Matrix-Vector Multiplication:
- Create a random vector of appropriate size and perform matrix-vector multiplication using the dot() method.
- Compute Transpose:
- Compute the transpose of the CSR sparse matrix using the .transpose() method.
- Sum of elements:
- Calculate the sum of all elements in the sparse matrix using the .sum() method.
- Display the original sparse matrix, its converted formats, the result of matrix-vector multiplication, the transpose of the matrix, and the sum of its elements.
Python-Numpy Code Editor:
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics