Bird
Raised Fist0
SciPydata~20 mins

MATLAB file I/O (loadmat, savemat) in SciPy - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
MATLAB I/O Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of loading a MATLAB .mat file with nested structs?

Consider a MATLAB .mat file saved with a nested struct variable. When loaded using scipy.io.loadmat, what is the type of the nested struct in Python?

SciPy
import scipy.io
mat = scipy.io.loadmat('nested_struct.mat')
nested = mat['nested_struct']
type_nested = type(nested[0,0]['field1'][0,0])
print(type_nested)
A<class 'scipy.io.matlab.mio5_params.mat_struct'>
B<class 'dict'>
C<class 'numpy.ndarray'>
D<class 'list'>
Attempts:
2 left
💡 Hint

MATLAB structs are loaded as special objects, not plain dicts.

data_output
intermediate
1:30remaining
How many variables are loaded from a .mat file with 3 variables?

You load a MATLAB file containing exactly 3 variables using scipy.io.loadmat. How many keys will the resulting dictionary have, excluding MATLAB metadata keys?

SciPy
import scipy.io
mat = scipy.io.loadmat('three_vars.mat')
keys = [k for k in mat.keys() if not k.startswith('__')]
print(len(keys))
A1
B5
C0
D3
Attempts:
2 left
💡 Hint

MATLAB metadata keys start and end with double underscores.

🔧 Debug
advanced
2:30remaining
Why does saving a dictionary with a list value cause an error in savemat?

Given the code below, why does scipy.io.savemat raise an error?

import scipy.io
data = {'arr': [1, 2, 3]}
scipy.io.savemat('file.mat', data)
SciPy
import scipy.io
data = {'arr': [1, 2, 3]}
scipy.io.savemat('file.mat', data)
Asavemat requires all values to be strings
Bsavemat expects numpy arrays, not Python lists
Csavemat cannot save dictionaries
Dsavemat only saves scalar values
Attempts:
2 left
💡 Hint

Check the data type of values passed to savemat.

🚀 Application
advanced
2:30remaining
How to save a Python dictionary with mixed data types to a .mat file?

You want to save a Python dictionary with keys 'name' (string), 'age' (int), and 'scores' (list of floats) to a MATLAB .mat file. Which approach works correctly?

AConvert 'scores' to numpy array, then use savemat
BSave the dictionary directly without changes
CConvert 'age' to string, then save
DConvert all values to lists, then save
Attempts:
2 left
💡 Hint

MATLAB expects arrays or scalars, not Python lists or mixed types.

🧠 Conceptual
expert
3:00remaining
What happens to MATLAB cell arrays when loaded with loadmat?

When loading a MATLAB .mat file containing a cell array using scipy.io.loadmat, how is the cell array represented in Python?

AAs a dict with keys as indices
BAs a Python list of lists
CAs a numpy ndarray with dtype=object containing elements
DAs a pandas DataFrame
Attempts:
2 left
💡 Hint

Cell arrays hold mixed types and are loaded as arrays with object dtype.

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