Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Saving and loading data (scipy.io)
📖 Scenario: You have collected some simple data from a small experiment. You want to save this data to a file so you can use it later without typing it again. Then, you want to load the saved data back into your program to check it.
🎯 Goal: Learn how to save a dictionary of data to a file using scipy.io.savemat and then load it back using scipy.io.loadmat.
📋 What You'll Learn
Create a dictionary with specific data arrays
Save the dictionary to a .mat file using scipy.io.savemat
Load the data back from the .mat file using scipy.io.loadmat
Print the loaded data to verify it matches the original
💡 Why This Matters
🌍 Real World
Scientists and engineers often save experimental data in .mat files to share and analyze later without re-running experiments.
💼 Career
Knowing how to save and load data files is essential for data scientists and researchers to manage data efficiently and reproduce results.
Progress0 / 4 steps
1
Create a dictionary with experiment data
Create a dictionary called experiment_data with two keys: 'temperature' and 'pressure'. Set 'temperature' to the list [22.1, 23.4, 21.8] and 'pressure' to the list [101.2, 100.8, 101.5].
SciPy
Hint
Use curly braces {} to create a dictionary. The keys are strings and the values are lists of numbers.
2
Set the filename to save the data
Create a variable called filename and set it to the string 'experiment.mat' which will be the name of the file to save the data.
SciPy
Hint
Use quotes to create a string for the filename.
3
Save the dictionary to a .mat file
Import savemat from scipy.io. Then use savemat to save experiment_data to the file named filename.
SciPy
Hint
Use from scipy.io import savemat to import. Then call savemat(filename, experiment_data).
4
Load the data back and print it
Import loadmat from scipy.io. Load the data from filename into a variable called loaded_data. Then print loaded_data.
SciPy
Hint
Use loaded_data = loadmat(filename) and then print(loaded_data). The output will include extra keys like '__header__'.
Practice
(1/5)
1. What is the primary purpose of scipy.io.savemat in data science?
easy
A. To load data from a CSV file
B. To save Python variables into a MATLAB .mat file
C. To visualize data in plots
D. To convert Python code to MATLAB code
Solution
Step 1: Understand the function purpose
scipy.io.savemat is designed to save Python data into MATLAB's .mat file format.
Step 2: Compare options with function use
Only To save Python variables into a MATLAB .mat file correctly describes saving Python variables into a .mat file. Other options describe unrelated tasks.
Final Answer:
To save Python variables into a MATLAB .mat file -> Option B
Quick Check:
savemat saves data = A [OK]
Hint: Remember: savemat saves, loadmat loads [OK]
Common Mistakes:
Confusing savemat with loadmat
Thinking savemat loads data
Assuming it works with CSV files
2. Which of the following is the correct way to load a .mat file named data.mat using scipy?
easy
A. data = io.loadmat('data.mat')
B. data = io.savemat('data.mat')
C. data = io.load('data.mat')
D. data = io.readmat('data.mat')
Solution
Step 1: Identify the correct function for loading .mat files
The function to load MATLAB files in scipy is loadmat.
Step 2: Check syntax correctness
data = io.loadmat('data.mat') uses io.loadmat('data.mat'), which is the correct syntax. Other options use incorrect function names.
Final Answer:
data = io.loadmat('data.mat') -> Option A
Quick Check:
loadmat loads .mat files = A [OK]
Hint: Load with loadmat, save with savemat [OK]
Common Mistakes:
Using savemat to load data
Using non-existent functions like readmat
Missing parentheses or quotes
3. What will be the output of this code snippet?
import numpy as np
from scipy import io
arr = np.array([1, 2, 3])
io.savemat('test.mat', {'array': arr})
data = io.loadmat('test.mat')
print(data['array'])
medium
A. [[1 2 3]]
B. Error: KeyError
C. [[1]
[2]
[3]]
D. [1 2 3]
Solution
Step 1: Understand how savemat stores arrays
When saving a 1D numpy array, savemat stores it as a 2D array with shape (1, n) by default.
Step 2: Check the loaded data shape
Loading back with loadmat returns a 2D array with shape (1, 3), so printing shows [[1 2 3]].
Final Answer:
[[1 2 3]] -> Option A
Quick Check:
1D array saved as 2D row = [[1 2 3]] [OK]
Hint: Loaded arrays from .mat are often 2D, not 1D [OK]
C. KeyError because 'my_data' is not a key in loaded dict
D. TypeError because list cannot be saved
Solution
Step 1: Check keys saved in .mat file
The dictionary key 'x' is saved, not the variable name 'my_data'. So loaded dict has key 'x', not 'my_data'.
Step 2: Understand the cause of KeyError
Trying to access loaded['my_data'] causes KeyError because that key does not exist.
Final Answer:
KeyError because 'my_data' is not a key in loaded dict -> Option C
Quick Check:
Access saved keys, not variable names [OK]
Hint: Access keys used in savemat dict, not variable names [OK]
Common Mistakes:
Assuming variable name is key in loaded dict
Confusing syntax errors with runtime errors
Expecting automatic key renaming
5. You want to save multiple numpy arrays a and b into a single .mat file and later load them back. Which code correctly saves and loads these arrays so you can access them by their variable names?
hard
A. io.savemat('multi.mat', [a, b])
data = io.loadmat('multi.mat')
print(data['a'], data['b'])
B. io.savemat('multi.mat', a, b)
data = io.loadmat('multi.mat')
print(data['a'], data['b'])
C. io.savemat('multi.mat', {'a': a, 'b': b})
data = io.loadmat('multi.mat')
print(data['multi']['a'], data['multi']['b'])
D. io.savemat('multi.mat', {'a': a, 'b': b})
data = io.loadmat('multi.mat')
print(data['a'], data['b'])
Solution
Step 1: Save multiple arrays with a dictionary
Use a dictionary with keys as variable names and values as arrays in savemat. io.savemat('multi.mat', {'a': a, 'b': b})
data = io.loadmat('multi.mat')
print(data['a'], data['b']) does this correctly.
Step 2: Load and access arrays by keys
After loading, access arrays by their keys 'a' and 'b' in the loaded dictionary. io.savemat('multi.mat', {'a': a, 'b': b})
data = io.loadmat('multi.mat')
print(data['a'], data['b']) prints them correctly.
Final Answer:
io.savemat('multi.mat', {'a': a, 'b': b})
data = io.loadmat('multi.mat')
print(data['a'], data['b']) -> Option D
Quick Check:
Save/load dict with keys = variable access [OK]
Hint: Save dict with names, load dict and access keys [OK]
Common Mistakes:
Passing list instead of dict to savemat
Trying to access nested keys incorrectly
Passing multiple args to savemat instead of one dict