在Python中访问MATLAB数据文件(.mat)可以通过scipy.io
模块或专用的h5py
库(针对MATLAB v7.3及以上版本)实现。以下是完整的技术解析和解决方案:
MATLAB数据文件(.mat)是二进制文件,存储变量、矩阵、结构体等数据。Python通过以下两种方式读取:
scipy.io.loadmat
直接加载为Python字典。h5py
库按层级访问数据。h5py
支持分块读取大文件,节省内存。| 方法 | 适用版本 | 依赖库 | 特点 |
|------------------------|--------------|------------------|-----------------------------------|
| scipy.io.loadmat
| ≤v7.2 | scipy
| 简单直接,但可能丢失部分元数据 |
| h5py.File
| ≥v7.3 | h5py
, numpy
| 需手动解析HDF5结构,支持大文件 |
import scipy.io
data = scipy.io.loadmat('data.mat') # 返回字典
print(data.keys()) # 查看所有变量名
print(data['array1']) # 访问具体变量
import h5py
with h5py.File('data_v73.mat', 'r') as f:
# 遍历HDF5结构(MATLAB变量可能存储在层级中)
for key in f.keys():
dataset = f[key][()] # 获取数据(转换为numpy数组)
print(f"变量名: {key}, 数据: {dataset}")
mat_data = scipy.io.loadmat('struct_data.mat', struct_as_record=False)
struct = mat_data['myStruct'] # 访问结构体
field_value = struct.fieldName[0,0] # 获取字段值(MATLAB结构体转为numpy.void)
NotImplementedError: Please use HDF reader for matlab v7.3 files
h5py
。h5py.File
读取。numpy.ascontiguousarray
:numpy.ascontiguousarray
:h5py
的切片读取:h5py
的切片读取:matplotlib
)。scikit-learn
或TensorFlow
。cell
数组会转为Python列表,struct
转为字典或numpy.void
。-v7
格式可避免HDF5依赖。通过上述方法,可高效实现Python与MATLAB的数据互通。
没有搜到相关的文章