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的
train和test下分别还有三个字段,分别是images,labels,writers
其中test下的labels是208001的
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)
结果为:
证明正确读取嵌套结构体的.mat文件
来源:https://blog.csdn.net/weixin_43773318/article/details/116429981
猜你喜欢
- 问题出现与解决Pandas进行数据处理之后,假如想将其转化为json,会出现一个bug,就是中文文字是以乱码存储的,也就是\uXXXXXX的
- 浏览网页的时候经常会碰到一些不认识的英文单词,或者想知道一些中文单词的翻译,这时候再去找翻译软件或者翻译网站就有些麻烦了。因此我做了一个“中
- 路由关系映射的一个小问题URL中那个上尖号在正则中表示 以某某开头 $符号表示以某某结尾 这就限制了开头和结尾,也就固定了长度但是 admi
- 本文实例讲述了Yii2框架整合Xunsearch搜索引擎的方法。分享给大家供大家参考,具体如下:公司一直用的YII2框架,然后要做一个中文搜
- OK,今天我们来学习一下 python 中的日志模块,日志模块也是我们日后的开发工作中使用率很高的模块之一,接下来们就看一看今天具体要学习日
- 备份MySQL数据库的命令mysqldump -hhostname -uusername -ppassword
- 包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等 (一)挂起操作 在安装Sq
- 挂载全局方法使用jsencrypt进行rsa加密原文链接:Js参数RSA加密传输,jsencrypt.js的使用 *https://www.
- 做手机整机测试的,肯定有开关机的需求,关机,几分钟后再开机(一直循环操作测试,就是不能重启);这个需求在关机后就没有办法开机了,任何脚本命令
- 描述:让Len,Left,Right函数识别中文;对中文识别为两个字符,ASCII码为一个;可用此函数代替Len,Left,Right函数。
- 内容摘要:Microsoft建立了一种既灵活又强大的安全管理机制,它能够对用户访问SQL Server服务器系统和数据库的安全进行
- 了兑现我对大家的承诺,我们现在立即就将“借助数据库和ASP程序”编写出来的,可以同时适用于IIS和P
- 前言学学Python中操纵JSON的知识。学完本文,你可以学到如下内容:1、JSON是什么?2、JSON与XML的优劣差异?3、将Pytho
- 总结类的定义很久以前,语言都是面向过程的,经过计算机科学家的探索,出现了面向对象。面向对象可以解释生活中很多东西。比如人,人就是个对象,有参
- 为了降低用户注册难度,国际站的主注册表单一直在改进。主注册三月至今发生了两次较大的变化,现在对表单调整的地方分解如下:1. 两步
- 瞬间设计是什么?良好的用户体验,全在于那些完美的瞬间。在第一个瞬间,假设当一位用户从购物搜索结果页面跳转到某个店铺的时候,他此刻可能是想看看
- 1.官网下载MySQL下载Mysql点击下载mysql. 或点击这里下载下载完成后解压到某一个文件夹(记住这个路径,一会要用到)2.配置初始
- 当用人问你MySQL 查询条件中 in 会不会用到索引,你该怎么回答?答案:可能会用到索引 动手来测试下1.创建一张表,给字段port建立索
- 神经网络玩得越久就越会尝试一些网络结构上的大改动。先说意图有两个模型:模型A和模型B。模型A的输出可以连接B的输入。将两个小模型连接成一个大
- Insert 和 Update假设现在你要把下面的数据插入到数据库中.ID = 3TheDate=mktime(0,0,0,8,31,200