Bird
Raised Fist0
SciPydata~10 mins

Saving and loading data (scipy.io) - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

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
Concept Flow - Saving and loading data (scipy.io)
Create data arrays
Use scipy.io.savemat to save data to .mat file
Use scipy.io.loadmat to read data from .mat file
Access loaded data arrays
Use data for analysis or visualization
The flow shows creating data, saving it to a file, loading it back, and then using the loaded data.
Execution Sample
SciPy
import numpy as np
from scipy.io import savemat, loadmat

# Create data
data = {'x': np.array([1,2,3]), 'y': np.array([4,5,6])}

# Save data
savemat('datafile.mat', data)

# Load data
loaded = loadmat('datafile.mat', squeeze_me=True)
print(loaded['x'])
This code saves two arrays to a .mat file and then loads them back, printing one array.
Execution Table
StepActionData StateResult/Output
1Create dictionary with arrays 'x' and 'y'{'x': [1 2 3], 'y': [4 5 6]}Data ready to save
2Call savemat('datafile.mat', data)File 'datafile.mat' createdData saved to file
3Call loadmat('datafile.mat', squeeze_me=True)Read file contentDictionary with keys including 'x', 'y', '__header__', '__version__', '__globals__'
4Access loaded['x']Extract array for 'x'[1 2 3]
5Print loaded['x']Output to console[1 2 3]
6End of scriptNo changeExecution stops
💡 Script ends after printing loaded data array 'x'
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
data{}{'x': array([1, 2, 3]), 'y': array([4, 5, 6])}SameSameSameSame
loadedN/AN/AN/A{'__header__': ..., '__version__': ..., '__globals__': ..., 'x': array([1, 2, 3]), 'y': array([4, 5, 6])}SameSame
Key Moments - 2 Insights
Why does the loaded dictionary have extra keys like '__header__' besides 'x' and 'y'?
When loading a .mat file, scipy.io.loadmat returns a dictionary with metadata keys like '__header__', '__version__', and '__globals__' along with your saved variables. See execution_table step 3.
Can I save variables other than arrays using savemat?
savemat saves variables as arrays or compatible types. Complex Python objects may not save correctly. Use arrays or simple data structures as in execution_table step 1.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 4, what is the value of loaded['x']?
A[4 5 6]
B[1 2 3]
CA dictionary
DAn error
💡 Hint
Check the 'Result/Output' column at step 4 in execution_table.
At which step is the .mat file created?
AStep 1
BStep 3
CStep 2
DStep 5
💡 Hint
Look at the 'Action' and 'Result/Output' columns for file creation in execution_table.
If you change the data dictionary to include a string, what might happen when saving?
AIt raises an error or saves incorrectly
BIt saves without issues
CIt converts string to array automatically
DIt ignores the string variable
💡 Hint
Refer to key_moments about data types savemat can handle.
Concept Snapshot
Saving and loading data with scipy.io:
- Use savemat(filename, dict) to save arrays to .mat file
- Use loadmat(filename) to load data back as a dictionary
- Loaded dict includes metadata keys plus your variables
- Save only arrays or compatible types
- Access variables by their keys after loading
Full Transcript
This visual execution shows how to save and load data using scipy.io. First, we create a dictionary with numpy arrays. Then, we save it to a .mat file using savemat. Next, we load the file back with loadmat, which returns a dictionary including metadata and our saved arrays. We access the arrays by their keys and print them. The variable tracker shows how 'data' and 'loaded' change. Key moments clarify why extra keys appear and data type limits. The quiz tests understanding of loaded data, file creation step, and data type handling.

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

  1. Step 1: Understand the function purpose

    scipy.io.savemat is designed to save Python data into MATLAB's .mat file format.
  2. 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.
  3. Final Answer:

    To save Python variables into a MATLAB .mat file -> Option B
  4. 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

  1. Step 1: Identify the correct function for loading .mat files

    The function to load MATLAB files in scipy is loadmat.
  2. 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.
  3. Final Answer:

    data = io.loadmat('data.mat') -> Option A
  4. 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

  1. 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.
  2. 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]].
  3. Final Answer:

    [[1 2 3]] -> Option A
  4. Quick Check:

    1D array saved as 2D row = [[1 2 3]] [OK]
Hint: Loaded arrays from .mat are often 2D, not 1D [OK]
Common Mistakes:
  • Expecting 1D array output
  • Confusing row vs column shape
  • Assuming KeyError due to wrong key
4. Identify the error in this code snippet:
from scipy import io
my_data = {'x': [1, 2, 3]}
io.savemat('file.mat', my_data)
loaded = io.loadmat('file.mat')
print(loaded['my_data'])
medium
A. FileNotFoundError when loading file.mat
B. SyntaxError in savemat call
C. KeyError because 'my_data' is not a key in loaded dict
D. TypeError because list cannot be saved

Solution

  1. 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'.
  2. Step 2: Understand the cause of KeyError

    Trying to access loaded['my_data'] causes KeyError because that key does not exist.
  3. Final Answer:

    KeyError because 'my_data' is not a key in loaded dict -> Option C
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    io.savemat('multi.mat', {'a': a, 'b': b}) data = io.loadmat('multi.mat') print(data['a'], data['b']) -> Option D
  4. 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