Ler.ficheiros mat em Python

Alguém tem uma experiência de sucesso a ler Matlab binário .ficheiros mat em Python?

(Eu vi que 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())

Author: Amro, 2009-05-17

8 answers

Que tolice a minha. Esqueci-me de importar io...
import scipy.io
mat = scipy.io.loadmat('file.mat')
 367
Author: Gilad Naor, 2009-05-17 12:16:13

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
 103
Author: vikrantt, 2016-12-02 08:28:04
Lixei meia hora mesmo depois de ler as respostas. Espero que esta resposta ajude.

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')
 19
Author: Bhanu Pratap Singh, 2015-06-16 13:25:39

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)
 9
Author: Daniel, 2015-03-06 22:58:25

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 ou miINT32)
  • 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
 5
Author: mozzbozz, 2014-10-30 16:10:03

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.

 4
Author: Daksh, 2018-03-05 17:10:41

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/

 2
Author: aquercia, 2015-04-16 21:17:15
Há um belo pacote chamado 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.

 2
Author: Cleb, 2018-09-23 14:06:31