📖 Scenario: Imagine you have a large table of numbers where most of the values are zero. This happens often in real life, like when you track which movies people watched but most people watch only a few movies.
🎯 Goal: You will create a normal matrix and a sparse matrix with the same data. Then you will compare their memory sizes to see why sparse matrices save memory.
📋 What You'll Learn
Create a dense matrix using numpy with mostly zeros
Create a sparse matrix using scipy.sparse.csr_matrix from the dense matrix
Calculate the memory size of both matrices
Print the memory sizes to compare
💡 Why This Matters
🌍 Real World
Sparse matrices are used in recommendation systems, natural language processing, and network analysis where data is mostly zeros.
💼 Career
Understanding sparse matrices helps in optimizing memory and speed in data science and machine learning jobs.
Progress0 / 4 steps
1
Create a dense matrix with mostly zeros
Import numpy as np and create a 5x5 dense matrix called dense_matrix with these exact values: all zeros except dense_matrix[1, 2] = 10 and dense_matrix[3, 4] = 20.
SciPy
Hint
Use np.zeros((5, 5), dtype=np.int32) to create the matrix. Then assign values to the specific positions.
2
Create a sparse matrix from the dense matrix
Import csr_matrix from scipy.sparse and create a sparse matrix called sparse_matrix from dense_matrix.
SciPy
Hint
Use csr_matrix(dense_matrix) to convert the dense matrix to sparse.
3
Calculate memory sizes of both matrices
Calculate the memory size of dense_matrix using dense_matrix.nbytes and store it in dense_size. Calculate the memory size of sparse_matrix using sparse_matrix.data.nbytes and store it in sparse_size.
SciPy
Hint
Use .nbytes to get the memory size in bytes.
4
Print the memory sizes to compare
Print the text "Dense matrix size:" followed by dense_size. Then print the text "Sparse matrix size:" followed by sparse_size.
SciPy
Hint
Use two print statements to show the sizes with the exact text.
Practice
(1/5)
1. Why do sparse matrices save memory compared to regular dense matrices?
easy
A. Because they store only the non-zero elements and their positions
B. Because they compress all data into a single number
C. Because they convert numbers into strings
D. Because they store all elements including zeros explicitly
Solution
Step 1: Understand storage in dense matrices
Dense matrices store every element, including zeros, which uses a lot of memory when many zeros exist.
Step 2: Understand storage in sparse matrices
Sparse matrices store only non-zero values and their positions, saving memory by ignoring zeros.
Final Answer:
Because they store only the non-zero elements and their positions -> Option A
Quick Check:
Sparse matrices save memory by storing non-zero values only [OK]
Hint: Sparse = store only non-zero values and positions [OK]
Common Mistakes:
Thinking sparse matrices store all zeros explicitly
Confusing compression with sparse storage
Believing sparse matrices convert numbers to strings
2. Which of the following is the correct way to create a sparse matrix using scipy?
easy
A. scipy.sparse.csr_matrix([[0, 0], [1, 0]])
B. scipy.sparse.dense_matrix([[0, 1], [0, 0]])
C. scipy.sparse.array([[1, 0], [0, 1]])
D. scipy.sparse.matrix([[0, 0], [0, 0]])
Solution
Step 1: Identify valid sparse matrix constructors in scipy
scipy.sparse provides constructors like csr_matrix, csc_matrix, etc. 'csr_matrix' is a common sparse format.
Step 2: Check each option for correctness
scipy.sparse.csr_matrix([[0, 0], [1, 0]]) uses csr_matrix correctly. Options B, C, and D use invalid or non-existent functions.
Final Answer:
scipy.sparse.csr_matrix([[0, 0], [1, 0]]) -> Option A
Quick Check:
Use csr_matrix to create sparse matrices [OK]
Hint: Use csr_matrix() to create sparse matrices [OK]
Common Mistakes:
Using non-existent functions like dense_matrix or sparse.array
Confusing sparse matrix constructors with dense matrix functions
Forgetting to import scipy.sparse before use
3. What will be the output of this code?
import numpy as np
from scipy.sparse import csr_matrix
arr = np.array([[0, 0, 3], [4, 0, 0]])
sparse_mat = csr_matrix(arr)
print(sparse_mat.data)
medium
A. [0 0 3 4 0 0]
B. [0 3 4]
C. [3 4 0]
D. [3 4]
Solution
Step 1: Understand csr_matrix data attribute
The 'data' attribute stores only the non-zero elements of the sparse matrix in row-major order.
Step 2: Identify non-zero elements in the array
In arr, non-zero elements are 3 (at position [0,2]) and 4 (at position [1,0]).
Final Answer:
[3 4] -> Option D
Quick Check:
csr_matrix.data shows only non-zero values [OK]
Hint: csr_matrix.data shows only non-zero values [OK]
Common Mistakes:
Expecting zeros to appear in sparse data
Confusing data attribute with full matrix
Misreading the order of stored elements
4. Find the error in this code that tries to create a sparse matrix:
B. csr_matrix cannot be created from a list of lists
C. No error, code runs correctly and prints non-zero values
D. csr_matrix requires dense matrix input, not list
Solution
Step 1: Check csr_matrix input types
csr_matrix can accept a list of lists as input and convert it to sparse format.
Step 2: Verify code execution
The code imports csr_matrix, creates a sparse matrix from a list, and prints non-zero data without error.
Final Answer:
No error, code runs correctly and prints non-zero values -> Option C
Quick Check:
csr_matrix accepts list input directly [OK]
Hint: csr_matrix accepts list of lists input [OK]
Common Mistakes:
Assuming csr_matrix needs numpy arrays only
Thinking missing numpy import causes error here
Believing csr_matrix cannot handle lists
5. You have a large 10000x10000 matrix with 99% zeros. Which approach saves the most memory and why?
Option A: Store as a dense numpy array Option B: Store as a scipy sparse matrix Option C: Store as a list of lists including zeros Option D: Store as a dictionary with all elements
hard
A. Option A, because numpy arrays are always memory efficient
B. Option B, because sparse matrices store only non-zero values and positions
C. Option C, because lists are flexible and fast
D. Option D, because dictionaries store keys and values explicitly
Solution
Step 1: Analyze memory use of dense numpy arrays
Dense arrays store every element, so 10000x10000 elements use a lot of memory, including zeros.
Step 2: Analyze sparse matrix memory use
Sparse matrices store only non-zero elements and their positions, greatly reducing memory when zeros dominate.
Step 3: Compare lists and dictionaries
Lists of lists store all elements including zeros, using much memory. Dictionaries store keys and values, but overhead is high and all elements must be stored.
Final Answer:
Option B, because sparse matrices store only non-zero values and positions -> Option B
Quick Check:
Sparse matrices save memory with many zeros [OK]
Hint: Sparse matrices save memory by ignoring zeros [OK]
Common Mistakes:
Assuming numpy arrays are always memory efficient
Thinking lists or dictionaries save memory with many zeros
Ignoring overhead of storing keys in dictionaries
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.