Czy w Pythonie można odczytać binarne pliki MATLAB .mat?
Widziałem, że SciPy rzekomo wspiera czytanie plików .mat, ale mi się nie udaje. Zainstalowałem SciPy w wersji 0.7.0 i nie mogę znaleźć loadmat()
metody.
Wymagany jest import import scipy.io
...
import scipy.io
mat = scipy.io.loadmat('file.mat')
save('myfile.mat','-v7')
Ani
scipy.io.savemat
niescipy.io.loadmat
działa dla tablic MATLAB w wersji 7.3. Ale dobrą stroną jest to, że pliki MATLAB w wersji 7.3 są zestawami danych hdf5. Aby można je było odczytać za pomocą wielu narzędzi, w tym NumPy .W przypadku Pythona potrzebujesz
h5py
rozszerzenia, które wymaga HDF5 w twoim systemie.źródło
save
(przynajmniej w Matlab R2014b) powoduje powstanie pliku, którego nie można odczytać przy użyciu powyższej techniki. Jeśli użyjesz flagi „-v7.3”, dane liczbowe można odczytać w porządku.save('filename', '-v7.3', 'var1');
Najpierw zapisz plik .mat jako:
Następnie w Pythonie użyj zwykłej
loadmat
funkcji:źródło
Jest ładny pakiet o nazwie,
mat4py
który można łatwo zainstalować za pomocąKorzystanie z witryny jest proste:
Załaduj dane z pliku MAT
Funkcja
loadmat
ładuje wszystkie zmienne przechowywane w pliku MAT do prostej struktury danych Pythona, używając tylko Pythonadict
ilist
obiektów. Tablice numeryczne i komórkowe są konwertowane na zagnieżdżone listy uporządkowane w wierszach. Tablice są ściśnięte, aby wyeliminować tablice zawierające tylko jeden element. Wynikowa struktura danych składa się z prostych typów zgodnych z JSON formatem .Przykład: Załaduj plik MAT do struktury danych Python:
Zmienna
data
zawieradict
zmienne i wartości zawarte w pliku MAT.Zapisz strukturę danych Python w pliku MAT
Dane w języku Python można zapisać w pliku MAT za pomocą funkcji
savemat
. Dane muszą być skonstruowane w taki sam sposób jak w przypadkuloadmat
, czyli powinien być złożony z prostych typów danych, takich jakdict
,list
,str
,int
, ifloat
.Przykład: Zapisz strukturę danych Python w pliku MAT:
Parametr
data
powinien byćdict
zmienny.źródło
mat4py/cmd.py my.mat
piszemy.json
, 1 długa linia.)mat4py.loadmat.ParseError: Can only read from Matlab level 5 MAT-files
Po zainstalowaniu MATLAB 2014b lub nowszego można użyć silnika MATLAB dla Pythona :
źródło
Czytanie pliku
Sprawdzanie typu zmiennej MAT
Te klucze wewnątrz słownika są zmienne MATLAB , a wartości są obiekty przypisane do tych zmiennych .
źródło
Istnieje również silnik MATLAB dla Pythona opracowany przez MathWorks. Jeśli masz MATLAB, warto to rozważyć (sam tego nie próbowałem, ale ma o wiele więcej funkcji niż tylko czytanie plików MATLAB). Nie wiem jednak, czy wolno go rozpowszechniać innym użytkownikom (prawdopodobnie nie ma problemu, jeśli osoby te mają MATLAB. W przeciwnym razie może NumPy jest właściwą drogą?).
Ponadto, jeśli chcesz zrobić wszystkie podstawy sam, MathWorks zapewnia (jeśli link się zmieni, spróbuj google
matfile_format.pdf
lub jego tytułMAT-FILE Format
) szczegółową dokumentację dotyczącą struktury formatu pliku. Nie jest to tak skomplikowane, jak osobiście myślałem, ale oczywiście nie jest to najłatwiejsza droga. Zależy to również od tego, ile funkcji.mat
-plików chcesz obsługiwać.Napisałem „mały” (około 700 wierszy) skrypt w języku Python, który potrafi odczytać podstawowe
.mat
pliki. Nie jestem ani ekspertem w Pythonie, ani początkującym i napisanie go zajęło mi około dwóch dni (korzystając z dokumentacji MathWorks, do której odsyłam powyżej). Nauczyłem się wielu nowych rzeczy i było całkiem fajnie (przez większość czasu). Ponieważ napisałem skrypt Pythona w pracy, obawiam się, że nie mogę go opublikować ... Ale mogę tu udzielić porady:.mat
który chcesz przeanalizować.miCOMPRESSED
,miMATRIX
,mxDOUBLE
, lubmiINT32
).mat
plików jest optymalna do zapisywania elementów danych w strukturze danych drzewa; każdy węzeł ma jedną klasę i podwęzłyźródło
Możesz użyć powyższego kodu, aby odczytać domyślnie zapisany plik .mat w Pythonie.
źródło