Ler.ficheiros mat em Python
scipy
tem alegado apoio para a leitura .ficheiros mat, mas não tenho sucesso com isso. Eu instalei scipy
a versão 0. 7. 0, e não consigo encontrar o método loadmat()
)
8 answers
import scipy.io
mat = scipy.io.loadmat('file.mat')
Nem scipy.io.savemat
, nem scipy.io.loadmat
trabalham para MATLAB arrays --v7.3. Mas a parte boa é que matlab --v7.3 arquivos são conjuntos de dados hdf5. Para que possam ser lidos usando uma série de ferramentas, incluindo o numpy.
Para o python, irá precisar da extensão h5py
, que requer o HDF5 no seu sistema.
import numpy as np
import h5py
f = h5py.File('somefile.mat','r')
data = f.get('data/variable1')
data = np.array(data) # For converting to numpy array
Primeiro, gravar o ficheiro mat como
save('test.mat','-v7')
Depois disso em Python use o loadmat habitual
import scipy.io as sio
test = sio.loadmat('test.mat')
Tendo o Matlab 2014b ou o mais recente instalado, o motor Matlab para o Python pode ser utilizado:
import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat",nargout=1)
Existe também o motor MATLAB para Python pelo próprio MathWorks. Se você tem Matlab, isso pode valer a pena considerar (Eu não tentei eu mesmo, mas ele tem muito mais funcionalidade do que apenas ler arquivos Matlab). No entanto, eu não sei se é permitido distribuí-lo para outros usuários (provavelmente não há problema se essas pessoas têm Matlab, caso contrário talvez NumPy é o caminho certo para ir?).
Também, se você quiser fazer tudo o básico, MathWorks fornece (se a ligação mudar, tente procurar no google por matfile_format.pdf
ou pelo seu título MAT-FILE Format
) uma documentação detalhada sobre a estrutura do formato do ficheiro. Não é tão complicado como eu pensava, mas obviamente, esta não é a maneira mais fácil de morrer. Isso também depende de, quantas características dos arquivos .mat
que você deseja suportar.
Eu escrevi um script Python" pequeno " (cerca de 700 linhas) que pode ler alguns arquivos básicos .mat
. Não sou especialista em Python nem principiante. dois dias para escrevê-lo (usando a documentação do MathWorks ligada acima). Eu aprendi um monte de coisas novas e foi bastante divertido (A maior parte do tempo). Como escrevi o guião em Python no trabalho, receio não poder publicá-lo... Mas posso dar alguns conselhos aqui:
- leia primeiro a documentação
- Use um editor hexadecimal (tal como HxD) e procure um ficheiro de referência
.mat
que queira analisar - tente descobrir o Significado de cada Byte, guardando os Bytes para um ficheiro txt e anotar cada linha
- usar classes para gravar cada elemento de dados (como por exemplo:
miCOMPRESSED
,miMATRIX
,mxDOUBLE
oumiINT32
) - a estrutura dos ficheiros
.mat
é óptima para guardar os elementos de dados numa estrutura de dados em árvore; cada nó tem uma classe e sub-códigos
A ler o ficheiro
import scipy.io
mat = scipy.io.loadmat(file_name)
Inserir a variável tipo de tapete
print(type(mat))
#OUTPUT - <class 'dict'>
as chaves dentro do dicionário são as variáveis matlab e os valores são os objectos atribuídos a essas variáveis.
Os ficheiros Hdf5 também podem ser tratados por meio de PyTables. A sua FAQ tem uma entrada que se compara com h5py: https://pytables.github.io/FAQ.html Os PyTables também vêm com os ViTables do visualizador: http://vitables.org/galleries/Screenshots/
mat4py
que pode ser facilmente instalado usando
pip install mat4py
É simples de usar (a partir do site):
Carregar os dados do ficheiro MAT
A função loadmat
carrega todas as variáveis armazenadas no ficheiro MAT numa simples estrutura de dados em Python, usando apenas os objectos dict
e list
. As matrizes numéricas e celulares são convertidas para listas aninhadas ordenadas por linhas. Os Arrays são apertados para eliminar arrays com apenas um. elemento. A estrutura de dados resultante é composta por tipos simples que são compatíveis com o formato JSON
.
Exemplo: carregar um ficheiro MAT numa estrutura de dados em Python:
data = loadmat('datafile.mat')
A variável data
é uma dict
com as variáveis e valores contidos no ficheiro MAT.
Gravar a estrutura de dados em Python num ficheiro MAT
Os dados em Python podem ser gravados num ficheiro MAT, com a função savemat
. Os dados devem ser estruturados da mesma forma que os dados de loadmat
, ou seja, devem ser estruturados da mesma forma que os dados de loadmat
. deve ser composto por tipos de dados simples, como dict
, list
, str
, int
e float
Exemplo: gravar uma estrutura de dados em Python num ficheiro MAT:
savemat('datafile.mat', data)
O parâmetro data
deve ser um dict
com as variáveis.