2010-10-26 11 views
13

मेरे पास एक MAT-file में एक बड़ी संरचना है। मैं यह जांचना चाहता हूं कि संरचना में बिना किसी विशिष्ट फ़ील्ड मौजूद है, इसलिए सामग्री बहुत बड़ी है और मैं स्मृति उपयोग को कम करना चाहता हूं।मैटलैब में इसे लोड किए बिना MAT-फ़ाइल की सामग्री कैसे देख सकता हूं?

यह संभव है, या मैं जहाँ तक मुझे पता है, आप क्रम में फ़ाइल को लोड करने के लिए यदि किसी सहेजे गए जांच करने के लिए सक्षम होना चाहिए निम्न उदाहरण ?:

load('test.mat');    %# Load the MAT-file 
tf = isfield(s,'fieldname'); %# Check if structure s has field 'fieldname' 

उत्तर

22

यह लोड किए बिना एक मेट फ़ाइल की सामग्री की जाँच करने के लिए, का उपयोग करें:

vars = whos('-file','test.mat') 
ismember('fieldname', {vars.name}) 
+0

'test.mat' अंदर संरचनाओं के क्षेत्रों के लिए है कि काम करता है? – Jonas

+0

@ जोनास: उपर्युक्त कोड केवल परिवर्तनीय नामों के लिए जांचता है। तो जैसे आपने अपने उत्तर में उल्लेख किया है, उपयोगकर्ता को MAT-file में सहेजते समय संरचना फ़ील्ड को अलग-अलग चर में विभाजित करने के लिए सहेजने के '-स्ट्रक्चर' विकल्प का उपयोग करना चाहिए। – Amro

+2

@ जोनास: अन्यथा, और यदि उपयोगकर्ता स्मृति उपयोग के बारे में वास्तव में चिंतित है, तो हम वास्तविक MAT-फ़ाइल के साथ फ़ील्ड नामों को एक अलग टेक्स्ट फ़ाइल में लिख सकते हैं, फिर वास्तविक संरचना लोड करने से पहले आवश्यक टेक्स्ट फ़ाइल लोड और जांच सकते हैं डेटा – Amro

6

में पहली जैसे कि यह लोड करना होगा संरचना में एक विशिष्ट क्षेत्र होता है।

हालांकि, अगर आप '-struct'-option के साथ .mat फ़ाइल को सहेजते हैं, तो यह फ़ील्ड को .mat फ़ाइल में अलग-अलग चर में विभाजित करता है। आपके पास कॉल

myStructure = load('test.mat'); 

बचत द्वारा संरचना को पुन: कर सकते हैं इस तरह से भी आप है कि क्या एक क्षेत्र (चर) @Amro के दृष्टिकोण (जो कि मैं क्या करने से पहले सुझाव दिया की तुलना में बहुत क्लीनर है) का उपयोग कर मौजूद है के लिए परीक्षण करने के लिए अनुमति देता है।