python保存大型 .mat 数据文件报错超出 IO 限制的操作


Posted in Python onMay 10, 2021

python 保存 .mat 文件的大小是有限制的,似乎是 5G 以内,如果需要保存几十个 G 的数据的话,可以选用其他方式,

比如 h5 文件

import h5py
def h5_data_write(train_data, train_label, test_data, test_label, shuffled_flag):
    print("h5py文件正在写入磁盘...")
    
    save_path = "../save_test/" + "train_test_split_data_label_" + shuffled_flag + ".h5"
    with h5py.File(save_path, 'w') as f:
        f.create_dataset('train_data', data=train_data)
        f.create_dataset('train_label', data=train_label)
        f.create_dataset('test_data', data=test_data)
        f.create_dataset('test_label', data=test_label)
    print("h5py文件保存成功!")
def h5_data_read(filename):
    """
        keys() : 获取本文件夹下所有的文件及文件夹的名字
        f['key_name'] : 获取对应的对象
    """
    file = h5py.File(filename,'r')
    train_data = file['train_data'][:]
    train_label = file['train_label'][:]
    test_data = file['test_data'][:]
    test_label = file['test_label'][:]
    return train_data, train_label, test_data, test_label

补充:通过python 读MATLAB数据文件 *.mat

背景

在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果。

所以某些matlab从图片处理得到的label信息都会以.mat文件供python读取,同时也python产生的结果信息也需要matlab来做进一步的处理(当然也可以使用txt,不嫌麻烦自己处理结构信息)。

介绍

matlab和python间的数据传输一般是基于matlab的文件格式.mat,python中numpy和scipy提供了一些函数,可以很好的对.mat文件的数据进行读写和处理。

在这里numpy作用是提供Array功能映射matlab里面的Matrix,而scipy提供了两个函数loadmat和savemat来读写.mat文件。

下面是一个简单的测试程序

具体的函数用法可以看帮助文档:

import scipy.io as sio 
import matplotlib.pyplot as plt 
import numpy as np 
 
#matlab文件名 
matfn=u'E:/python/测试程序/162250671_162251656_1244.mat' 
data=sio.loadmat(matfn) 
 
plt.close('all') 
xi=data['xi'] 
yi=data['yi'] 
ui=data['ui'] 
vi=data['vi'] 
plt.figure(1) 
plt.quiver( xi[::5,::5],yi[::5,::5],ui[::5,::5],vi[::5,::5]) 
plt.figure(2) 
plt.contourf(xi,yi,ui) 
plt.show()  
sio.savemat('saveddata.mat', {'xi': xi,'yi': yi,'ui': ui,'vi': vi})

示例2

import scipy.io as sio
import numpy as np
 
###下面是讲解python怎么读取.mat文件以及怎么处理得到的结果###
load_fn = 'xxx.mat'
load_data = sio.loadmat(load_fn)
load_matrix = load_data['matrix'] #假设文件中存有字符变量是matrix,例如matlab中save(load_fn, 'matrix');当然可以保存多个save(load_fn, 'matrix_x', 'matrix_y', ...);
load_matrix_row = load_matrix[0] #取了当时matlab中matrix的第一行,python中数组行排列
 
###下面是讲解python怎么保存.mat文件供matlab程序使用###
save_fn = 'xxx.mat'
save_array = np.array([1,2,3,4])
sio.savemat(save_fn, {'array': save_array}) #和上面的一样,存在了array变量的第一行
 
save_array_x = np.array([1,2,3,4])
save_array_y = np.array([5,6,7,8])
sio.savemat(save_fn, {'array_x': save_array_x, 'array_x': save_array_x}) #同理,

鉴于以后的目标主要是利用现有的Matlab数据(.mat或者.txt),主要考虑python导入Matlab数据的问题。以下代码可以解决python读取.mat文件的问题。

主要使用sicpy.io即可。

sicpy.io提供了两个函数loadmat和savemat,非常方便。

# adapted from http://blog.csdn.net/rumswell/article/details/8545087
import scipy.io as sio  
#import matplotlib.pyplot as plt
from pylab import *
import numpy as np   
 
matfn='E:\\Pythonrun\\myuse\\matdata.mat'   # the path of .mat data
data=sio.loadmat(matfn)  
xx=data['matdata']
figure(1)
plot(xx)
show()

以下代码是读入txt数据并转换成数组,方法比较笨,更有效的方法待研究。

from numpy import * 
def file2list(filename):  

    fr = open(filename)  
    array = fr.readlines() #以文件中的每行为一个元素,形成一个list列表  
    num = len(array)  
    returnMat = zeros((num,3))#初始化元素为0的,行号数个列表,其中每个元素仍是列表,元素数是3,在此表示矩阵  
    index = 0   
 
    for line in array:  
        line = line.strip()#去掉一行后的回车符号  
        linelist = line.split(' ')#将一行根据分割符,划分成多个元素的列表  
        returnMat[index,:] = linelist[0:3]#向矩阵赋值,注意这种赋值方式比较笨拙  
        index +=1  
    return returnMat
 
fname = 'E:\\Pythonrun\\myuse\\num_data.txt'
data= file2list(fname)

补充:Python 读写 Matlab Mat 格式数据

1. 非 matlab v7.3 files 读写

import scipy.io as sio
import numpy
# matFile 读取
matFile = 'matlabdata.mat'
datas = sio.loadmat(matFile)
# 加载 matFile 内的数据
# 假设 mat 内保存的变量为 matlabdata
matlabdata = datas['matlabdata']
# matFile 写入
save_matFile = 'save_matlabdata.mat'
save_matlabdata = np.array([1,2,3,4,5])
sio.savemat(save_matFile, {'array':save_matlabdata})

2. matlab v7.3 files 读取

如果 matlab 保存 data 时,采用的是 ‘-v7.3',scipy.io.loadmat函数加载数据会出现错误:

File "/usr/local/lib/python2.7/dist-packages/scipy/io/matlab/mio.py", line 64, in mat_reader_factory
    raise NotImplementedError('Please use HDF reader for matlab v7.3 files')
NotImplementedError: Please use HDF reader for matlab v7.3 files

可以采用:

import h5py
with h5py.File('matlabdata.mat', 'r') as f:
    f.keys() # matlabdata.mat 中的变量名
datas = h5py.File('matlabdata.mat')['matlabdata'].value

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python中使用PIPE操作Linux管道
Feb 04 Python
python删除列表内容
Aug 04 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
python机器学习实战之树回归详解
Dec 20 Python
python构建深度神经网络(DNN)
Mar 10 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
基于Python实现用户管理系统
Feb 26 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
Python作用域与名字空间原理详解
Mar 21 Python
Python flask路由间传递变量实例详解
Jun 03 Python
Python虚拟环境库virtualenvwrapper安装及使用
Jun 17 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 Python
Python批量将csv文件转化成xml文件的实例
python基础之爬虫入门
python设置 matplotlib 正确显示中文的四种方式
提取视频中的音频 Python只需要三行代码!
Python-typing: 类型标注与支持 Any类型详解
May 10 #Python
超详细Python解释器新手安装教程
Python机器学习三大件之一numpy
You might like
php中的boolean(布尔)类型详解
2013/10/28 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
python字符串查找函数的用法详解
2019/07/08 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
python读取xml文件方法解析
2020/08/04 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
python线程优先级队列知识点总结
2021/02/28 Python
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
通息工程毕业生自荐信
2013/10/16 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
陕西导游词
2015/02/04 职场文书
公务员年终个人总结
2015/02/12 职场文书
2015年中学团委工作总结
2015/07/22 职场文书
《猴王出世》教学反思
2016/02/23 职场文书