返回顶部
首页 > 资讯 > 后端开发 > Python >python中保存大型.mat数据文件报错超出IO限制的操作示例
  • 865
分享到

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

2023-06-15 00:06:13 865人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

小编给大家分享一下python中保存大型.mat数据文件报错超出io限制的操作示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python的五大特点是什么pyt

小编给大家分享一下python中保存大型.mat数据文件报错超出io限制的操作示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Python的五大特点是什么

python的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2.面向对象,与其他主要的语言如c++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。3.可移植性,Python程序无需修改就可以在各种平台上运行。4.解释性,Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。5.开源,Python是 FLOSS(自由/开放源码软件)之一。

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

比如 h6 文件

import h6pydef h6_data_write(train_data, train_label, test_data, test_label, shuffled_flag):    print("h6py文件正在写入磁盘...")        save_path = "../save_test/" + "train_test_split_data_label_" + shuffled_flag + ".h6"    with h6py.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("h6py文件保存成功!")def h6_data_read(filename):    """        keys() : 获取本文件夹下所有的文件及文件夹的名字        f['key_name'] : 获取对应的对象    """    file = h6py.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 sioimport 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/8545087import scipy.io as sio  #import matplotlib.pyplot as pltfrom pylab import *import numpy as np    matfn='E:\\Pythonrun\\myuse\\matdata.mat'   # the path of .mat datadata=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 sioimport numpy# matFile 读取matFile = 'matlabdata.mat'datas = sio.loadmat(matFile)# 加载 matFile 内的数据# 假设 mat 内保存的变量为 matlabdatamatlabdata = 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 h6pywith h6py.File('matlabdata.mat', 'r') as f:    f.keys() # matlabdata.mat 中的变量名datas = h6py.File('matlabdata.mat')['matlabdata'].value

以上是“python中保存大型.mat数据文件报错超出IO限制的操作示例”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网Python频道!

--结束END--

本文标题: python中保存大型.mat数据文件报错超出IO限制的操作示例

本文链接: https://lsjlt.com/news/276195.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作