Lire.fichiers mat en Python

Quelqu'un a-t-il une expérience réussie de lecture de Matlab binaire .fichiers mat en Python?

(j'ai vu que scipy a prétendu soutenir la lecture .mat fichiers, mais je suis infructueux avec elle. J'ai installé scipy version 0.7.0, et je ne trouve pas la méthode loadmat())

261
demandé sur Amro 2009-05-17 16:02:04

8 réponses

Idiot moi. J'ai oublié d'importer io...

import scipy.io
mat = scipy.io.loadmat('file.mat')
367
répondu Gilad Naor 2009-05-17 12:16:13

Ni scipy.io.savemat, Ni scipy.io.loadmat ne fonctionnent pour les tableaux matlab --v7.3. Mais la bonne partie est que les fichiers matlab --v7.3 sont des ensembles de données hdf5. Ainsi, ils peuvent être lus en utilisant un certain nombre d'outils, y compris numpy.

Pour python, vous aurez besoin de l'extension h5py, qui nécessite HDF5 sur votre système.

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
répondu vikrantt 2016-12-02 08:28:04

J'ai baisé une demi-heure même après avoir lu les réponses. J'espère que cette réponse AIDE

Enregistrez d'Abord le tapis de fichier

save('test.mat','-v7')

Après cela en Python, utilisez le loadmat habituel

import scipy.io as sio
test = sio.loadmat('test.mat')
19
répondu Bhanu Pratap Singh 2015-06-16 13:25:39

Ayant Matlab 2014b ou plus récent installé, le moteur Matlab pour Python pourrait être utilisé:

import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat",nargout=1)
9
répondu Daniel 2015-03-06 22:58:25

Il y a aussi le moteur MATLAB pour Python par MathWorks lui-même. Si vous avez Matlab, cela pourrait valoir la peine d'être considéré (Je ne l'ai pas essayé moi-même, mais il a beaucoup plus de fonctionnalités que de simplement lire les fichiers Matlab). Cependant, je ne sais pas s'il est autorisé à le distribuer à d'autres utilisateurs (probablement pas de problème si ces personnes ont Matlab, sinon peut-être que NumPy est la bonne façon d'aller?).

Aussi, si vous voulez faire toutes les bases vous-même, MathWorks fournit (si le lien change, essayez de google pour matfile_format.pdf ou son titre MAT-FILE Format) une documentation détaillée sur la structure du format de fichier. Ce n'est pas aussi compliqué que je le pensais personnellement, mais évidemment, ce n'est pas la meilleure façon d'aller. Cela dépend également du nombre de fonctionnalités des fichiers .mat que vous souhaitez prendre en charge.

J'ai écrit un script Python "petit" (environ 700 lignes)qui peut lire des fichiers de base .mat. Je ne suis ni un expert en Python ni un débutant et il m'a fallu environ deux jours pour l'écrire (en utilisant la documentation MathWorks liée ci-dessus). J'ai appris beaucoup de nouvelles choses et c'était assez amusant (la plupart du temps). Comme j'ai écrit le script Python au travail, j'ai peur de ne pas pouvoir le publier... Mais je peux donner quelques conseils ici:

  • , lisez d'Abord la documentation
  • utilisez un éditeur hexadécimal (tel que HxD ) et regardez dans un fichier de référence .mat que vous souhaitez analyser
  • essayez de comprendre la signification de chaque octet en enregistrant les octets dans un fichier txt et annotez chacun ligne
  • Utiliser des classes pour enregistrer chaque élément de données (tels que miCOMPRESSED, miMATRIX, mxDOUBLE ou miINT32)
  • la structure .mat-files est optimale pour enregistrer les éléments de données dans une structure de données arborescente; chaque nœud a une classe et des sous-nœuds
5
répondu mozzbozz 2014-10-30 16:10:03

De la Lecture du fichier

import scipy.io
mat = scipy.io.loadmat(file_name)

Insertion du type de variable mat

print(type(mat))
#OUTPUT - <class 'dict'>

Le keys à l'intérieur du dictionnaire sont matlab variables et le valeurs sont les les objets assignés à ces variables.

4
répondu Daksh 2018-03-05 17:10:41

Les fichiers Hdf5 peuvent également être traités au moyen de PyTables. Leur FAQ a une entrée qui se compare à h5py: https://pytables.github.io/FAQ.html . PyTables est également livré avec le visualiseur ViTables pratique: http://vitables.org/galleries/Screenshots/

2
répondu aquercia 2015-04-16 21:17:15

Il y a un joli paquet appelé mat4py qui peut facilement être installé à l'aide de

pip install mat4py

, Il est simple à utiliser (à partir du site web):

Charger les données du fichier MAT

La fonction loadmat charge toutes les variables stockées dans le fichier MAT dans une structure de données Python simple, en utilisant uniquement les objets dict et list de Python. Les tableaux numériques et cellulaires sont convertis en listes imbriquées ordonnées par lignes. Les tableaux sont pressés pour éliminer les tableaux avec un seul élément. La structure de données résultante est composée de types simples compatibles avec le format JSON.

Exemple: charger un fichier MAT dans une structure de données Python:

data = loadmat('datafile.mat')

La variable data est un dict, avec les variables et les valeurs contenues dans le TAPIS-fichier.

Enregistrer la structure de données Python dans un fichier MAT

Les données Python peuvent être enregistrées dans un fichier MAT, avec la fonction savemat. Les données doivent être structurées de la même manière que pour loadmat, c'est à dire qu'il devrait être composé de types de données simples, comme dict, list, str, int et float.

Exemple: enregistrer une structure de données Python dans un fichier MAT:

savemat('datafile.mat', data)

Le paramètre data est un dict, avec les variables.

2
répondu Cleb 2018-09-23 14:06:31