2013-03-19 11 views
8

Mam plik .mat wygenerowany z programu matlab 2012b. Zawiera zmienną z zdefiniowaną przez użytkownika klasą matlab.Dostęp do pliku .mat zawierającego klasy matlab w pythonie

Po załadowaniu pliku przy użyciu scipy.io.loadmat w Pythonie 3.3, pojawia się następujący:

mat=scipy.io.loadmat('D:\test.mat') 
mat 
{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Fri Feb 22 15:26:28 2013', '__function_workspace__': array([[ 0, 1, 73, ..., 0, 0, 0]], dtype=uint8), '__globals__': [], '__version__': '1.0', 'None': MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])], 
     dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])} 

szukam aby uzyskać dostęp do „futureDS” obiekt typu „cStream”, ale nie są w stanie zrobić więc używając maty ["Brak"]. Mata wywołująca ["Brak"] proste wyniki:

MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])], 
     dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')]) 

Utknąłem tutaj. Jestem nowy w python i próbuję przenieść moją starą pracę z MATLAB. Każda pomoc będzie doceniona.

Dziękuję.

Odpowiedz

4

Niestety, SciPy nie obsługuje plików mat zawierających obiekty klasy new-style (te zdefiniowane z classdef), ani też żadnego zewnętrznego czytnika plików matowych, o ile wiem. Ten element o nazwie __function_workspace__ w zwrócony słowniku mat zawiera informacje, o które prosisz, w sposób nieudokumentowany i jeszcze nieodwersyjny.

Najprostszym rozwiązaniem jest przekonwertowanie niestandardowych klas na podstawowe obiekty struct w programie Matlab przed zapisaniem ich na dysku. Można to osiągnąć (aczkolwiek z ostrzeżeniem), po prostu wywołując struct(futureDS). Eksponuje wszystkie publiczne i prywatne nieruchomości jako zwykłe pola, które może odczytać każdy czytelnik strony trzeciej warty swojej soli.

(Bardziej technicznie, Matlab zapisuje te obiekty z Matlab Array type id 17, official documentation (PDF) tylko wylicza typy do 15).

+2

Jako postscriptę udało mi się odtworzyć wiele tego formatu. [Zobacz ten notatnik IJulia] (http://nbviewer.ipython.org/gist/mbauman/9121961) w celu uzyskania szczegółowych informacji. –

Powiązane problemy