2013-06-26 3 views
24

Я пытаюсь прочитать файл MatLab с помощью следующего кодачтения v файл 7,3 мата в питоне

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

, и это дает мне следующую ошибку

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

так может кто-нибудь пожалуйста, имел то же самое проблема и может угодить любой образец кода

благодаря

+0

, связанные с: http://stackoverflow.com/q/874461/1714410 – Shai

ответ

25

Попробуйте использовать h5py модуль

import h5py 
with h5py.File('test.mat', 'r') as f: 
    f.keys() 
+1

да, но есть массив структур, и я понятия не имею, как читать его, – Shan

+1

' f.keys() 'должен указывать имена переменных, хранящихся в' 'test.mat''. Можете ли вы получить доступ к 'f ['s'] [0] .keys()'? Предполагая, что '' 'является именем массива struct, который вы сохранили, это должно дать вам список полей' s'. – Shai

+0

Нет, я не могу его получить, более конкретно, я пытаюсь прочитать файл мата, указанный на следующем веб-сайте, http://ufldl.stanford.edu/housenumbers/, в файле train.tar.gz, есть коврик файл с именем digitStruct.mat – Shan

4

В соответствии с кулинарной книгой Scipy. http://wiki.scipy.org/Cookbook/Reading_mat_files,

Начиная с версии 7.3 Matlab, файлы матов фактически сохраняются с использованием формата HDF5 по умолчанию (за исключением случаев использования флага -vX во время экономии, см. Справку по спасению в Matlab). Эти файлы можно прочитать в Python, используя, например, PyTables или h5py-пакет. Чтение структур Matlab в файлах матов в данный момент не поддерживается.

Возможно, вы могли бы использовать Octave для повторного сохранения с использованием флага -vX.

+0

Насколько я могу судить, октава не поддерживает файлы v7.3. Так что вам действительно нужно переустановить, используя достаточно недавнюю версию matlab. –

8
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) 

вы должны закончить с вашими данными в arrays Словаре, если у вас есть MATLAB структуры, я подозреваю. Надеюсь, поможет!

+0

, похоже, не работает для меня .. –

+0

Какую проблему вы наблюдаете? вы проверили, что MATLAB (или октава) может открыть файл? – norok2

+0

Да, я могу открыть его с ними! –

3

Я взглянул на эту проблему: https://github.com/h5py/h5py/issues/726. Если вы сохранили файл с ковриком -v7.3 варианта, вы должны создать список ключей с (под Python 3.x):

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

Для того, чтобы получить доступ к переменным a к примеру, вы должны использовать тот же трюк :

with h5py.File('test.mat', 'r') as file: 
    a = list(file['a']) 
+0

Мне это нравится. Он отлично работает! –

1

Per Magu_'s answer on a related thread, проверить пакет hdf5storage, который имеет удобные функции для чтения v7.3 MATLAB матовых файлов; это так же просто, как

import hdf5storage 
mat = hdf5storage.loadmat('test.mat')