python 저장 대형.mat 데이터 파일 오류가 IO 제한을 초과한 작업

5871 단어 python보존matIO
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\
um_data.txt' data= file2list(fname)
추가: Python 읽기 및 쓰기 Matlab Mat 형식 데이터

1. 비matlab v7.3 파일 읽기와 쓰기


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 파일 읽기


matlab가 데이터를 저장할 때'-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
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.

좋은 웹페이지 즐겨찾기