Bird
Raised Fist0
SciPydata~5 mins

MATLAB file I/O (loadmat, savemat) in SciPy

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
Introduction

We use MATLAB file I/O to read and write MATLAB data files in Python. This helps us share data between MATLAB and Python easily.

You have data saved in a MATLAB .mat file and want to analyze it in Python.
You want to save Python data so MATLAB can open and use it.
You are working on a project that uses both MATLAB and Python and need to exchange data files.
You want to load MATLAB results into Python for visualization or further processing.
You want to save Python arrays or dictionaries into a .mat file for MATLAB users.
Syntax
SciPy
from scipy.io import loadmat, savemat

# Load MATLAB file
data = loadmat('filename.mat')

# Save data to MATLAB file
savemat('filename.mat', {'variable_name': data_to_save})

loadmat loads MATLAB .mat files into a Python dictionary.

savemat saves Python dictionaries to .mat files readable by MATLAB.

Examples
This loads the MATLAB file 'data.mat' into a Python dictionary called mat_data.
SciPy
from scipy.io import loadmat
mat_data = loadmat('data.mat')
This saves a NumPy array as my_array in the MATLAB file 'output.mat'.
SciPy
from scipy.io import savemat
import numpy as np

array = np.array([1, 2, 3])
savemat('output.mat', {'my_array': array})
Sample Program

This program saves a dictionary with scores and names to a MATLAB file, then loads it back and prints the contents.

SciPy
from scipy.io import loadmat, savemat
import numpy as np

# Create some data to save
my_dict = {'scores': np.array([90, 85, 88]), 'names': np.array(['Ann', 'Bob', 'Cara'], dtype=object)}

# Save data to MATLAB file
savemat('example.mat', my_dict)

# Load the data back
loaded_data = loadmat('example.mat')

# Print loaded data keys and values
for key in loaded_data:
    if not key.startswith('__'):
        print(f"{key}: {loaded_data[key]}")
OutputSuccess
Important Notes

MATLAB .mat files store data in a dictionary-like structure when loaded in Python.

Keys starting with '__' in loaded data are metadata and can be ignored.

Use dtype=object for string arrays to avoid issues when saving/loading.

Summary

Use loadmat to read MATLAB .mat files into Python dictionaries.

Use savemat to save Python dictionaries as MATLAB .mat files.

This allows easy data exchange between MATLAB and Python.

Practice

(1/5)
1.

What does the scipy.io.loadmat function do?

easy
A. Loads data from a MATLAB .mat file into a Python dictionary
B. Saves a Python dictionary as a MATLAB .mat file
C. Converts Python lists to MATLAB arrays
D. Executes MATLAB code from Python

Solution

  1. Step 1: Understand the function purpose

    loadmat is designed to read MATLAB .mat files.
  2. Step 2: Identify the output type

    It returns the data as a Python dictionary with variable names as keys.
  3. Final Answer:

    Loads data from a MATLAB .mat file into a Python dictionary -> Option A
  4. Quick Check:

    loadmat reads .mat files into dict [OK]
Hint: Remember: loadmat reads, savemat writes [OK]
Common Mistakes:
  • Confusing loadmat with savemat
  • Thinking loadmat executes MATLAB code
  • Assuming loadmat converts data formats automatically
2.

Which of the following is the correct way to save a Python dictionary data to a MATLAB file named output.mat using savemat?

?
easy
A. savemat('output.mat', data)
B. savemat(data, 'output.mat')
C. savemat({'output.mat': data})
D. savemat('output.mat', {'data': data})

Solution

  1. Step 1: Check savemat function signature

    savemat(filename, dict) requires a filename string and a dictionary of variables.
  2. Step 2: Wrap data in a dictionary with a variable name

    To save data, it must be inside another dictionary like {'data': data}.
  3. Final Answer:

    savemat('output.mat', {'data': data}) -> Option D
  4. Quick Check:

    savemat needs filename and dict [OK]
Hint: savemat needs dict with variable names as keys [OK]
Common Mistakes:
  • Passing data directly without wrapping in dict
  • Swapping filename and data arguments
  • Using incorrect argument types
3.

What will be the output of the following code?

from scipy.io import loadmat
mat_data = loadmat('sample.mat')
print(type(mat_data))

Assume sample.mat is a valid MATLAB file.

medium
A. <class 'numpy.ndarray'>
B. <class 'dict'>
C. <class 'list'>
D. FileNotFoundError

Solution

  1. Step 1: Understand loadmat output

    loadmat returns a Python dictionary containing MATLAB variables.
  2. Step 2: Check the printed type

    Printing type of mat_data shows <class 'dict'>.
  3. Final Answer:

    <class 'dict'> -> Option B
  4. Quick Check:

    loadmat returns dict [OK]
Hint: loadmat output is always a dict [OK]
Common Mistakes:
  • Expecting a list or array directly
  • Assuming loadmat raises error if file exists
  • Confusing output type with variable inside dict
4.

Identify the error in this code snippet:

from scipy.io import savemat
my_data = {'x': [1, 2, 3]}
savemat(my_data, 'data.mat')
medium
A. Dictionary keys must be strings
B. List values cannot be saved in .mat files
C. Arguments to savemat are in wrong order
D. Missing import statement

Solution

  1. Step 1: Check savemat argument order

    savemat expects filename first, then dictionary.
  2. Step 2: Identify argument swap

    Code passes dictionary first, filename second, which is incorrect.
  3. Final Answer:

    Arguments to savemat are in wrong order -> Option C
  4. Quick Check:

    savemat(filename, dict) order matters [OK]
Hint: Filename is first argument in savemat [OK]
Common Mistakes:
  • Swapping filename and data arguments
  • Assuming lists can't be saved
  • Forgetting to import savemat
5.

You want to save two variables, a = [1, 2, 3] and b = [[4, 5], [6, 7]], into a MATLAB file vars.mat. Which code correctly saves both variables so MATLAB can load them as a and b?

hard
A. savemat('vars.mat', {'a': a, 'b': b})
B. savemat('vars.mat', {'vars': [a, b]})
C. savemat('vars.mat', {'a': [a], 'b': [b]})
D. savemat('vars.mat', {'a': a}, {'b': b})

Solution

  1. Step 1: Understand savemat input format

    savemat requires a dictionary mapping variable names to values.
  2. Step 2: Check how to save multiple variables

    Pass a single dictionary with keys 'a' and 'b' mapped to their values.
  3. Step 3: Identify correct option

    savemat('vars.mat', {'a': a, 'b': b}) correctly passes {'a': a, 'b': b} as one dictionary.
  4. Final Answer:

    savemat('vars.mat', {'a': a, 'b': b}) -> Option A
  5. Quick Check:

    Multiple variables saved in one dict [OK]
Hint: Use one dict with all variables as keys [OK]
Common Mistakes:
  • Passing multiple dicts instead of one
  • Wrapping variables in extra lists unnecessarily
  • Using a single key for multiple variables