Est-il possible de lire des fichiers binaires MATLAB .mat en Python?
J'ai vu que SciPy a prétendument pris en charge la lecture des fichiers .mat, mais je n'y parviens pas. J'ai installé SciPy version 0.7.0 et je ne trouve pas la loadmat()
méthode.
save('myfile.mat','-v7')
Ni
scipy.io.savemat
, ni nescipy.io.loadmat
fonctionne pour les baies MATLAB version 7.3. Mais la bonne partie est que les fichiers MATLAB version 7.3 sont des ensembles de données hdf5. Ils peuvent donc être lus à l'aide d'un certain nombre d'outils, y compris NumPy .Pour Python, vous aurez besoin de l'
h5py
extension, qui nécessite HDF5 sur votre système.la source
save
(au moins dans Matlab R2014b) entraîne un fichier qui ne peut pas être lu à l'aide de la technique ci-dessus. Si vous utilisez le drapeau '-v7.3', les données numériques peuvent être lues très bien.save('filename', '-v7.3', 'var1');
Enregistrez d'abord le fichier .mat sous:
Après cela, en Python, utilisez la
loadmat
fonction habituelle :la source
Il y a un joli paquet appelé
mat4py
qui peut facilement être installé en utilisantIl est simple à utiliser (à partir du site Web):
Charger des données à partir d'un 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 des objetsdict
et Pythonlist
. Les tableaux numériques et cellulaires sont convertis en listes imbriquées rangées. Les tableaux sont compressé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 JSON format .Exemple: chargez un fichier MAT dans une structure de données Python:
La variable
data
est undict
avec les variables et les valeurs contenues dans le fichier MAT.Enregistrer une 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 pourloadmat
, à savoir qu'il devrait être composé de types de données simples, commedict
,list
,str
,int
etfloat
.Exemple: enregistrez une structure de données Python dans un fichier MAT:
Le paramètre
data
doit être adict
avec les variables.la source
mat4py/cmd.py my.mat
écritmy.json
, 1 longue file.)mat4py.loadmat.ParseError: Can only read from Matlab level 5 MAT-files
Après avoir installé MATLAB 2014b ou une version plus récente, le moteur MATLAB pour Python pourrait être utilisé:
la source
Lecture du fichier
Inspection du type de variable MAT
Les clés à l'intérieur du dictionnaire sont des variables MATLAB et les valeurs sont les objets affectés à ces variables .
la source
Il existe également le moteur MATLAB pour Python de 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 la simple lecture de fichiers MATLAB). Cependant, je ne sais pas s'il est autorisé à le distribuer à d'autres utilisateurs (ce n'est probablement pas un problème si ces personnes ont MATLAB. Sinon, NumPy est peut-être la bonne voie à suivre?).
De plus, si vous voulez faire vous-même toutes les bases, MathWorks fournit (si le lien change, essayez de rechercher Google
matfile_format.pdf
ou son titreMAT-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 voie la plus simple à suivre. Cela dépend également du nombre de fonctionnalités du.mat
fichiers que vous souhaitez prendre en charge.J'ai écrit un "petit" (environ 700 lignes) script Python qui peut lire des
.mat
fichiers de base . Je ne suis ni un expert 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 bien peur de ne pas pouvoir le publier ... Mais je peux vous donner quelques conseils ici:.mat
fichier de référence que vous souhaitez analyser.miCOMPRESSED
,miMATRIX
,mxDOUBLE
oumiINT32
).mat
structure des fichiers 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œudsla source
Vous pouvez utiliser le code ci-dessus pour lire le fichier .mat enregistré par défaut en Python.
la source