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
보충: [Matlab/Python] Matlab과 Python 간의 데이터 전송
많은 경우, 우리는 matlab의 데이터를 저장한 다음python으로 처리해야 한다.

메서드 1(.mat 형식)


matlab의 데이터를 직접 저장합니다.mat 형식, 그리고python에서scipy를 사용합니다.io의loadmat 함수로 읽기

import scipy.io     as sio
data = sio.loadmat(...)

메소드 2(.h5 형식)


저장할 때.mat 파일이 비교적 크면 matlab에서save-v7.3을 사용해야 저장할 수 있습니다.그러나 이용 방법은python에서 읽을 때 지원되지 않습니다.다음 방법으로 읽을 수 있습니다

with h5py.File("mydata.mat") as f:
    data = f["mydata"][:]
데이터를 정확하게 읽을 수 있지만 수조 차원은 거꾸로 돌아간다. 즉, 원래(2,3,4,5), 읽으면 (5,4,3,2)
하지만 오직.mat 데이터는save-v7.3로 저장할 때 이 방법으로 읽을 수 있습니다. 그렇지 않으면 응용 프로그램에서 읽을 수 있습니다
그래서 matlab에서 데이터를 저장할 수 있습니다.h5 형식, 통일적으로 방법2에 따라 읽기
matlab에 저장합니다.h5 형식은 다음과 같은 방법으로

h5create('data.h5','/data',[2,3,4,5]);
data = rand(2,3,4,5)
h5write('data.h5','/data',data)
그러나python으로 읽을 때 매트릭스 차원은 여전히 거꾸로
이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기