Python读写MAT文件完整指南:从基础操作到V7.3格式与维度处理

何川
何川
发布时间:2026-10-13| 4人浏览过
原创

本文详细介绍在Python中读取和写入MAT文件的方法。涵盖使用scipy.io进行基础读写,针对大于2GB的V7.3格式文件使用h5py读取的技巧。重点解析Python读取时常见的维度顺序不一致问题(如1000,128,128,3变为128,128,3,1000),并提供通过np.transpose进行维度调整的具体代码示例,确保数据在TensorFlow等框架中正常使用。

Python读写MAT文件概述

本文将系统介绍在Python环境中读取和写入MAT文件的具体实现方式。

Matlab示例文件生成

首先,我们需要在Matlab中创建一个示例MAT文件,以便后续进行Python读取测试。


clear;clc
matrix1 = magic(5);
matrix2 = magic(6);
save matData.mat

Python基础读写操作

接下来,展示如何使用Python 3环境来读取上述生成的MAT文件,并将其内容写入新的MAT文件中。


import scipy.io
data = scipy.io.loadmat('matData.mat') # 读取mat文件
# print(data.keys())  # 查看mat文件中的所有变量
print(data['matrix1'])
print(data['matrix2'])
matrix1 = data['matrix1'] 
matrix2 = data['matrix2']
print(matrix1)
print(matrix2)
scipy.io.savemat('matData2.mat',{'matrix1':matrix1, 'matrix2':matrix2}) # 写入mat文件

常见问题与解决方案

此外,还将探讨在Python中读取Matlab生成的MAT文件时可能遇到的常见问题及其解决方案。

在实际项目中,经常需要在Python环境下处理Matlab生成的MAT数据文件,在此过程中可能会遇到一些特定的技术障碍。

大于2GB文件的V7.3格式处理

第一个常见问题是文件大小限制。当数据集大小超过2GB时,标准的MAT文件读取方式可能失效。此时,Python无法直接正确读取,Matlab也无法以默认格式保存,必须采用-V7.3参数进行保存。具体操作如下:


#利用h5py读取-v7.3的.mat文件:
import h5py
dict_data = h5py.File('***.mat')  #在Python中读取的.mat为字典格式
array_data = dict_data['array_name'] 
#其中的array_name为在保存为.mat之前的真正变量名,如 MATLAB命令:save ***.mat array_name -v7.3

数据维度不一致与转置处理

第二个问题涉及使用h5py写入或读取时的数据维度不一致。例如,在Matlab中写入的数据维度为(1000,128,128,3),但在Python中读取时,维度可能变为(128,128,3,1000)。因此,必须对Python读取到的数据进行转置处理,以恢复原始维度结构。具体处理代码如下:


data_train = h5py.File('train_order6.mat','r')
input_train = data_train['z_wrap']
input_train = np.transpose(input_train,(0,2,1)) #The shape is changed to be consistent with tensoflow [25000,128,128]->[25000,128,128]
input_train = np.expand_dims(input_train,axis=3) #[25000,128,128]->[25000,128,128,1]
label_train = data_train['z_allRegion']
label_train = np.transpose(label_train,(0,3,2,1))#The shape is changed to be consistent with tensoflow [25000,11,128,128]->[25000,128,128,11]

通常情况下,错误主要出现在第一维度和最后一个维度的顺序上,因此常见的转置顺序为(0,3,2,1)。为了确保数据处理的准确性,建议在读取后通过显示图片等方式验证数据维度是否正确。

解决维度问题的策略主要有两种:一是在Matlab存储数据时预先使用permute函数调整维度,这样Python可以直接正常读取;二是在Matlab正常存储后,在Python读取阶段使用transpose函数进行维度转置。步骤2中演示的即为第二种方法,即在Matlab正常存储,Python读取后进行transpose处理。

综上所述,本文总结了Python读写MAT文件的关键要点。

以上介绍了Python读取并写入MAT文件的核心方法,希望能为相关项目提供帮助。如有任何疑问,欢迎留言交流,我们将及时回复。感谢大家对本站的支持!如果您觉得本文对您有帮助,欢迎转载,请注明出处,谢谢!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。