Python读取及保存mat文件的注意事项说明

作者:向bug低头。 时间:2022-01-10 13:25:54 

Python读取及保存mat文件

在说明python读取mat文件之前需要强调2点:

读取的时候需要注意读出来的shape是什么样的,是否符合自己的预期,如果shape不是自己预期的那样,就需要用np.transpose(mat, [x, x, x])进行修正。

读取的时候需要注意取值范围,也就是最大值,因为在作为训练数据的时候需要首先进行归一化(避免无法收敛),而不同的mat文件的最大值是不一样的,有0-1、0-255、0-212、0-216。

python实现mat文件的读取主要有3个函数:

import scipy.io as io
imgpath = r"E:\shujuji\CAVE\CAVE_mat\balloons_ms.mat"
mat = io.loadmat(imgpath)['rad']
import h5py
imgpath = r"E:\shujuji\CAVE\CAVE_mat\balloons_ms.mat"
mat = h5py.File(imgpath, 'r')['rad']
import hdf5storage as hdf5
imgpath = r"E:\shujuji\CAVE\CAVE_mat\balloons_ms.mat"
mat = hdf5.loadmat(imgpath)['rad']

这里推荐使用第三种,也就是使用hdf5storage库进行读取,原因在于前两种与保存该mat文件时所用matlab的版本有关(7.3),也就是说一个mat文件要么能用scipy.io读,要么能用h5py能读。

而hdf5storage就不存在这个问题,一般的mat文件都能读取。

再就是使用不同函数读取时的shape不一致,容易搞乱,使用hdf5storage读取的shape和cv2.imread()读取RGB时的shape一致,方便处理。

python实现mat文件的保存同样建议使用hdf5storage(好像scipy也可):

hdf5storage.savemat(r"output\balloons_ms.mat", {'cube': mat}, format='7.3')
hdf5storage.savemat(r"output\balloons_ms.mat", {'rgb': rgb}, format='7.3')

使用hdf5storage保存时mat的shape是什么样的,用它读出来也就是什么样的,比较方便。

所以建议读取和保存都使用hdf5storage。

Python读取嵌套.mat文件

从网上下载的数据集可能是保存为.mat文件的,保存着很多图片

我们先来看一下本次实验所需要的.mat文件,主要结构体为dataset,包含3个字段,分别是train,test,mapping

其中test是11的


Python读取及保存mat文件的注意事项说明

train和test下分别还有三个字段,分别是images,labels,writers

其中test下的labels是208001的


Python读取及保存mat文件的注意事项说明

1.首先我们先加载对应的模块,并用这个模块加载对应的.mat文件

from scipy.io import loadmat
X = loadmat(r"letters.mat")

注:这里的路径需要修改

2.然后读取结构体dataset

data_all = X['dataset']

3.读取结构体下test下三个字段

#此处仅读取嵌套结构体下的test,还不是存储的数据
data = data_all[0,0]['test']
print('data.shape',data.shape)

#此处读取真正存储数据
data_labels = data[0,0]['labels']
print('data_labels.shape',data_labels.shape)

结果为:


Python读取及保存mat文件的注意事项说明

证明正确读取嵌套结构体的.mat文件

来源:https://blog.csdn.net/weixin_43773318/article/details/116429981

标签:Python,保存,mat文件
0
投稿

猜你喜欢

  • 分享自己用JS做的扫雷小游戏

    2024-04-30 08:54:19
  • Python通过psd-tools解析PSD文件

    2023-05-25 12:08:47
  • 教你怎样打造SQL Server2000的安全策略

    2009-01-23 14:03:00
  • Python利用shutil模块实现文件夹的复制删除与裁剪

    2023-12-19 04:16:23
  • 用代码帮你了解Python基础(3)

    2021-03-20 07:22:46
  • MySQL5.6解压版服务无法启动之系统错误1067问题

    2024-01-14 18:20:46
  • Python中的__init__作用是什么

    2022-05-28 00:27:02
  • python保留小数位的三种实现方法

    2021-09-05 22:36:09
  • 如何获取浏览器的更多信息?

    2009-11-23 20:48:00
  • python 计算t分布的双侧置信区间

    2023-08-01 03:06:05
  • 安装MySQL错误归档处理

    2008-12-22 14:50:00
  • 用Python编写简单的微博爬虫

    2022-10-07 04:58:34
  • Navicat连接mysql报错2003(10060)的解决方法

    2024-01-25 06:08:14
  • 详解PHP中的mb_detect_encoding函数使用方法

    2023-11-14 19:48:45
  • Python SMTP发送电子邮件的示例

    2023-09-26 17:57:24
  • MySQL复制表的三种方式(小结)

    2024-01-17 11:33:09
  • python检测服务器是否正常

    2022-06-18 05:10:19
  • 快速解决Golang Map 并发读写安全的问题

    2024-04-30 10:03:46
  • python双向链表实例详解

    2023-10-28 08:25:09
  • 使用limit,offset分页场景时为什么会慢

    2024-01-13 02:46:52
  • asp之家 网络编程 m.aspxhome.com