É possível ler arquivos .mat binários do MATLAB em Python?
Vi que o SciPy alegou suporte à leitura de arquivos .mat, mas não obtive êxito. Instalei o SciPy versão 0.7.0 e não consigo encontrar o loadmat()
método.
É necessária uma importação, import scipy.io
...
import scipy.io
mat = scipy.io.loadmat('file.mat')
save('myfile.mat','-v7')
Nem funciona
scipy.io.savemat
nemscipy.io.loadmat
para matrizes MATLAB versão 7.3. Mas a parte boa é que os arquivos do MATLAB versão 7.3 são conjuntos de dados hdf5. Para que possam ser lidos usando várias ferramentas, incluindo o NumPy .Para Python, você precisará da
h5py
extensão, que requer HDF5 no seu sistema.fonte
save
(pelo menos no Matlab R2014b) resulta em um arquivo que não pode ser lido usando a técnica acima. Se você usar o sinalizador '-v7.3', os dados numéricos poderão ser lidos perfeitamente.save('filename', '-v7.3', 'var1');
Primeiro salve o arquivo .mat como:
Depois disso, em Python, use a
loadmat
função usual :fonte
Existe um bom pacote chamado
mat4py
que pode ser facilmente instalado usandoÉ fácil de usar (no site):
Carregar dados de um arquivo MAT
A função
loadmat
carrega todas as variáveis armazenadas no arquivo MAT em uma estrutura de dados Python simples, usando apenas objetosdict
e Pythonlist
. Matrizes numéricas e de célula são convertidas em listas aninhadas ordenadas por linhas. Matrizes são compactadas para eliminar matrizes com apenas um elemento. A estrutura de dados resultante é composta por tipos simples que são compatíveis com o JSON formato .Exemplo: Carregue um arquivo MAT em uma estrutura de dados Python:
A variável
data
é adict
com as variáveis e os valores contidos no arquivo MAT.Salvar uma estrutura de dados Python em um arquivo MAT
Dados Python podem ser salvos em um arquivo MAT, com a função
savemat
. Dados tem que ser estruturada da mesma forma que paraloadmat
, ou seja, deve ser composta de tipos de dados simples, comodict
,list
,str
,int
, efloat
.Exemplo: Salve uma estrutura de dados Python em um arquivo MAT:
O parâmetro
data
deve ser adict
com as variáveis.fonte
mat4py/cmd.py my.mat
Escritasmy.json
, 1 linha longa.)mat4py.loadmat.ParseError: Can only read from Matlab level 5 MAT-files
Tendo o MATLAB 2014b ou mais recente instalado, o mecanismo MATLAB para Python poderia ser usado:
fonte
Lendo o arquivo
Inspecionando o tipo de variável MAT
As chaves dentro do dicionário são variáveis MATLAB e os valores são os objetos atribuídos a essas variáveis .
fonte
Existe também o MATLAB Engine for Python do próprio MathWorks. Se você possui o MATLAB, vale a pena considerar isso (não tentei, mas possui muito mais funcionalidade do que apenas ler arquivos do MATLAB). No entanto, não sei se é permitido distribuí-lo a outros usuários (provavelmente não será um problema se essas pessoas tiverem MATLAB. Caso contrário, talvez o NumPy seja o caminho certo a seguir?).
Além disso, se você quiser fazer o básico, o MathWorks fornece (se o link mudar, tente pesquisar no google
matfile_format.pdf
ou em seu títuloMAT-FILE Format
) uma documentação detalhada sobre a estrutura do formato do arquivo. Não é tão complicado quanto eu pensava, mas obviamente, esse não é o caminho mais fácil. Também depende de quantos recursos dos.mat
-files você deseja suportar.Eu escrevi um script Python "pequeno" (cerca de 700 linhas) que pode ler alguns
.mat
arquivos básicos . Não sou especialista em Python nem iniciante e demorei cerca de dois dias para escrevê-lo (usando a documentação do MathWorks vinculada acima). Eu aprendi muitas coisas novas e foi bastante divertido (na maioria das vezes). Como escrevi o script Python no trabalho, receio não poder publicá-lo ... Mas posso dar alguns conselhos aqui:.mat
arquivo de referência que você deseja analisar.miCOMPRESSED
,miMATRIX
,mxDOUBLE
, oumiINT32
).mat
estrutura -files 'é ideal para salvar os elementos de dados em uma estrutura de dados em árvore; cada nó tem uma classe e subnósfonte
Você pode usar o código acima para ler o arquivo .mat salvo padrão no Python.
fonte