2011-02-21 10 views
7

मेरे पास एक MATLAB फ़ंक्शन है जिसके लिए कुछ bigFile.mat के डेटा तक पहुंच की आवश्यकता है। यदि (ग्लोबल नेमस्पेस को प्रदूषित करने से बचने के लिए) मैंने फ़ंक्शन के भीतर लोड कमांड डाला है, तो MATLAB फिर से लोड हो जाएगा फ़ंक्शन को हर बार फ़ंक्शन कहा जाता है, या क्या यह कॉल के बीच बड़ी फ़ाइल को कैश करने के लिए पर्याप्त स्मार्ट है? जैसेMATLAB: फ़ंक्शन के भीतर से लोड

function hello() 
    load largeFile.mat; 
    display('hi'); 
end 

for i=1:1000 
    hello(); 
end 

मैं समारोह के भीतर लोड आदेश रखना चाहिए, या मैं इसे एक बार करना चाहिए और एक आर्ग के रूप में largeFile के डेटा पास? धन्यवाद!

उत्तर

6

मैटलैब इसे हर बार लोड करेगा, इसलिए इसे एक बार कॉल करने और इसे इनपुट के रूप में देने के लिए बहुत तेज है। यदि आप अपने कार्यक्षेत्र को अव्यवस्थित नहीं करना चाहते हैं, तो मेरा सुझाव है कि आप अपनी फ़ाइल को संरचना में लोड करें, जैसे

एल = लोड ('bigFile.mat');

संपादित करें: मैंने आपके हैलो() फ़ंक्शन और मेरी .mat फ़ाइलों में से एक पर एक त्वरित परीक्षण किया है। इसे फ़ंक्शन के अंदर लोड करना और इसे 100 बार चलाने के लिए मैंने 43.2 9 सेकेंड का इस्तेमाल किया। इसे एक बार लोड करना और इसे इनपुट के रूप में देना 100 रनों के लिए 0.41 सेकेंड ले गया, इसलिए समय अंतर बहुत बड़ा है।

+0

तुलना के समय के लिए धन्यवाद! – AlcubierreDrive

18

solution from Ghaul (एक संरचना में डेटा लोड हो रहा है और एक तर्क के रूप में यह गुजर) है कि मैं क्या के बाद से यह फ़ाइल नाम हार्डकोड करने टाल आम तौर पर सुझाव है/अपने काम करता है, जो आप की आवश्यकता अपने कार्य हर बार संपादित करने के लिए में पथ फ़ाइल का नाम या स्थान परिवर्तन। persistent variables का उपयोग करें:

हालांकि, पूर्णता के लिए के लिए एक और उपाय है। ये फ़ंक्शन के लिए स्थानीय चर हैं जो फ़ंक्शन पर कॉल के बीच स्मृति में अपने मान बनाए रखते हैं। आपकी स्थिति के लिए, आप यह कर सकते हैं:

function hello() 
    persistent data; %# Declare data as a persistent variable 
    if isempty(data) %# Check if it is empty (i.e. not initialized) 
    data = load('largeFile.mat'); %# Initialize data with the .MAT file contents 
    end 
    display('hi'); 
end 
+4

+1 मुझे एक नए चर प्रकार के बारे में सीखने के लिए +1। – Ghaul

+1

+1 वाह, कमाल! धन्यवाद :) – AlcubierreDrive

+0

+1 PHP स्थिर के समान +1 –

संबंधित मुद्दे