2009-05-17 5 views
234

में .mat फ़ाइलों को पढ़ें क्या किसी को भी पाइथन में बाइनरी Matlab .mat फ़ाइलों को पढ़ने का सफल अनुभव है?पायथन

(मैंने देखा है कि scipy फ़ाइलों .mat पढ़ने के लिए समर्थन ने आरोप लगाया है, लेकिन मैं इसके साथ असफल रहा हूँ। मैं scipy संस्करण 0.7.0 स्थापित है, और मैं loadmat() विधि नहीं मिल सकता है)

उत्तर

339

मुझे मूर्ख। कब आयात करने के लिए ...

import scipy.io 
mat = scipy.io.loadmat('file.mat') 
+3

आधिकारिक SciPy.io ट्यूटोरियल: http://docs.scipy.org/doc/scipy/reference/tutorial/io.html –

+13

scipy v7.3 mat-files का समर्थन नहीं करता है (नोट्स देखें [यहां] (http : //docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.io.loadmat.html))। देखें समाधान के लिए [vikrantt द्वारा जवाब] (http://stackoverflow.com/a/19340117/674976)। – texnic

+0

हालांकि, आप मैट-फाइलों को पिछले संस्करणों के रूप में सहेज सकते हैं। देखें: http://www.mathworks.com/help/matlab/import_export/mat-file-versions.html (हेडर: 'nondefault मेट-फ़ाइल संस्करण में सहेजें') – watsonic

92

न तो scipy.io.savemat, और न ही matlab सरणियों --v7.3 के लिए scipy.io.loadmat काम भूल। लेकिन अच्छा हिस्सा यह है कि matlab --v7.3 फ़ाइलें hdf5 डेटासेट हैं। इसलिए उन्हें numpy सहित कई उपकरणों का उपयोग करके पढ़ा जा सकता है।

पायथन के लिए, आपको h5py एक्सटेंशन की आवश्यकता होगी, जिसके लिए आपके सिस्टम पर एचडीएफ 5 की आवश्यकता होगी।

import numpy as np 
import h5py 
f = h5py.File('somefile.mat','r') 
data = f.get('data/variable1') 
data = np.array(data) # For converting to numpy array 
+3

यह ठीक काम करता है, अगर आप मैटलैब में '-v7.3' ध्वज का उपयोग जब अपने डेटा की बचत। डिफ़ॉल्ट 'save' (कम से कम मैटलैब R2014b में) एक फ़ाइल में परिणाम है कि इसके बाद के संस्करण तकनीक का उपयोग कर पढ़ा नहीं जा सकता का उपयोग करना। यदि आप '-v7.3' ध्वज का उपयोग करते हैं, तो संख्यात्मक डेटा को ठीक से पढ़ा जा सकता है। – chipaudette

+2

हां, मैंने अपनी पोस्ट में यही कहा है। Matlab में सहेजते समय आपको -v7.3 का उपयोग करने की आवश्यकता है। आपको वैसे भी ऐसा करना चाहिए क्योंकि यह एक बेहतर/अधिक समर्थित/मानकीकृत प्रारूप का उपयोग करता है। – vikrantt

+2

आप कृपया समझा सकते हैं कि आपके उदाहरण में _f_ और _data_ के बीच संबंध है? मैं _f_ को एक numpy सरणी में कैसे स्थानांतरित कर सकता हूं? – heracho

4

मैथवर्क्स द्वारा MATLAB Engine for Python भी है। यदि आपके पास मैटलैब है, तो यह माना जा सकता है (मैंने इसे स्वयं नहीं किया है लेकिन मैटलैब फ़ाइलों को पढ़ने की तुलना में इसमें बहुत अधिक कार्यक्षमता है)। हालांकि, मुझे नहीं पता कि इसे अन्य उपयोगकर्ताओं को वितरित करने की अनुमति है (शायद उन लोगों में कोई समस्या नहीं है यदि उन लोगों के पास मैटलैब है, अन्यथा शायद NumPy जाने का सही तरीका है?)।

इसके अलावा, अगर आप सभी मूल बातें अपने आप को क्या करना चाहते हैं, MathWorks provides फ़ाइल स्वरूप की संरचना पर एक विस्तृत प्रलेखन (लिंक परिवर्तन, matfile_format.pdf या इसके शीर्षक MAT-FILE Format के लिए गूगल करने की कोशिश करते हैं)। यह उतना जटिल नहीं है जितना मैंने व्यक्तिगत रूप से सोचा लेकिन जाहिर है, यह जाने का सबसे आसान तरीका नहीं है। यह भी निर्भर करता है कि .mat -फाइल की कितनी विशेषताएं आप समर्थन करना चाहते हैं।

मैंने एक "छोटी" (लगभग 700 लाइनें) पायथन लिपि लिखी है जो कुछ मूल .mat -files पढ़ सकता है। मैं न तो पाइथन विशेषज्ञ हूं और न ही शुरुआती हूं और इसे लिखने के लिए मुझे लगभग दो दिन लग गए हैं (उपरोक्त लिंक किए गए मैथवर्क्स दस्तावेज का उपयोग करके)। मैंने बहुत सी नई चीजें सीखी हैं और यह काफी मजेदार थी (ज्यादातर समय)। मैं काम पर पायथॉन लिपि में लिखा है के रूप में, मुझे डर है कि मैं इसे प्रकाशित नहीं कर सकता हूँ ... लेकिन मैं कुछ सलाह यहाँ दे सकते हैं:

  • पहले प्रलेखन
  • उपयोग एक हेक्स संपादक पढ़ें (HxD के रूप में इस तरह के) और एक संदर्भ .mat पर गौर -file आप पार्स करने के लिए
  • कोशिश
  • उपयोग प्रत्येक डेटा को बचाने के लिए कक्षाएं एक txt फ़ाइल के लिए बाइट सहेजकर प्रत्येक बाइट का अर्थ यह पता लगाने और प्रत्येक पंक्ति पर टिप्पणी करना चाहते हैं तत्व (जैसे miCOMPRESSED, miMATRIX, mxDOUBLE या miINT32)
  • .mat -फाइल की संरचना एक पेड़ डेटा संरचना में डेटा तत्वों को सहेजने के लिए इष्टतम है; प्रत्येक नोड एक वर्ग और subnodes
+7

एक किसी भी तरह पागल mathworks द्वारा प्रदान की प्रलेखन है कि। प्रारूप के बारे में बताते हुए 40 पेज, यह उल्लेख किए बिना कि यह एचडीएफ 5 का सबसेट है। – Daniel

+0

कहीं भी जिथब पर आपका कोड है? – ErroriSalvo

+1

@ErroriSalvo नोप, क्षमा करें। मैंने इसे काम पर किया है, मेरे खाली समय पर नहीं, इसलिए मैं कोड साझा नहीं कर सकता। इसके अलावा इसे वास्तव में कभी भी पॉलिश नहीं किया गया था, यह सबूत का सबूत था। – mozzbozz

6

होने मैटलैब 2014b या नए स्थापित है, Matlab engine for Python इस्तेमाल किया जा सकता:

import matlab.engine 
eng = matlab.engine.start_matlab() 
content = eng.load("example.mat",nargout=1) 
2

HDF5 फ़ाइलों को भी PyTables के माध्यम से निपटा जा सकता है। उनके अक्सर पूछे जाने वाले प्रश्न में एक प्रविष्टि है जो h5py: https://pytables.github.io/FAQ.html से तुलना करती है।PyTables भी आसान दृश्यमान ViTables के साथ आता है: http://vitables.org/galleries/Screenshots/

17

मैंने जवाब पढ़ने के बाद भी आधे घंटे तक खराब कर दिया है। आशा है कि इस मदद करता है जवाब

पहले सामान्य loadmat

import scipy.io as sio 
test = sio.loadmat('test.mat') 
0

अजगर में के रूप में

save('test.mat','-v7') 

चटाई फ़ाइल को सहेजने उसके बाद फ़ाइल

import scipy.io 
mat = scipy.io.loadmat(file_name) 

Insecting पढ़ना का उपयोग चटाई के प्रकार का प्रकार ble

print(type(mat)) 
#OUTPUT - <class 'dict'> 

कुंजी शब्दकोश अंदर matlab चर और मूल्योंवस्तुओं वे चर को सौंपा जाता है।