lecture du fichier V 7.3 mat en python

j'essaie de lire un fichier matlab avec le code suivant

import scipy.io
mat = scipy.io.loadmat('test.mat')

et il me donne l'erreur suivante

raise NotImplementedError('Please use HDF reader for matlab v7.3 files')
NotImplementedError: Please use HDF reader for matlab v7.3 files

alors, est-ce que n'importe qui pourrait avoir le même problème et pourrait avoir n'importe quel code échantillon

merci

32
demandé sur Shan 2013-06-26 13:53:15

5 réponses

Essayez d'utiliser h5py module

import h5py
with h5py.File('test.mat', 'r') as f:
    f.keys()
33
répondu Shai 2017-09-15 10:46:57
import h5py
import numpy as np
filepath = '/path/to/data.mat'
arrays = {}
f = h5py.File(filepath)
for k, v in f.items():
    arrays[k] = np.array(v)

vous devriez vous retrouver avec vos données dans le arrays dict, sauf si vous avez des structures MATLAB, je suppose. Espérons que cela aide!

11
répondu norok2 2017-02-01 13:20:19

Par la réponse de Magu_ sur un sujet connexe, découvrez le paquet hdf5storage qui a des fonctions de commodité pour lire v7.3 fichiers MATLAB mat; c'est aussi simple que

import hdf5storage
mat = hdf5storage.loadmat('test.mat')
7
répondu Maxim 2017-11-04 21:33:58

j'ai eu un coup d'oeil à ce problème: https://github.com/h5py/h5py/issues/726. Si vous avez enregistré votre tapis de fichier avec -v7.3 option, vous devriez générer la liste des clés avec (sous Python 3.x):

import h5py
with h5py.File('test.mat', 'r') as file:
    print(list(file.keys()))

pour accéder à la variable a par exemple, vous devez utiliser la même astuce:

with h5py.File('test.mat', 'r') as file:
    a = list(file['a'])
6
répondu Léonard 2018-03-05 06:54:09

selon le livre de recettes Scipy. http://wiki.scipy.org/Cookbook/Reading_mat_files,

à partir de la version 7.3 de Matlab, les fichiers mat sont en fait sauvegardés en utilisant le format HDF5 par défaut (sauf si vous utilisez l'option-vX à save time, voir aide enregistrer dans Matlab). Ces fichiers peuvent être lus en Python en utilisant, par exemple, le paquet PyTables ou h5py. la lecture des structures Matlab dans les fichiers mat ne semble pas supportée à ce niveau point.

peut-être pourriez-vous utiliser Octave pour re-sauvegarder en utilisant le drapeau-vX.

4
répondu lee 2015-06-17 00:10:27