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()
)
8 réponses
Idiot moi. J'ai oublié d'importer io...
import scipy.io
mat = scipy.io.loadmat('file.mat')
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
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')
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)
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
oumiINT32
) - 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
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.
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/
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.