2012-06-15 9 views
14

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

डेटा कुछ चरों पर लोड किया गया है और मैं भी नहीं बदल सकता, यह अलग-अलग पृष्ठभूमि नौकरियों में कई बार उपयोग किया जाता है, इसलिए मैं जो करना चाहता हूं उसका नाम बदलकर इसका नाम बदला जाता है ताकि नौकरियां मिश्रण न हों और अगला काम भार के लिए के बाद और नाम बदलने फिर से आदि

मूल रूप से कमांड विंडो क्या मैं कार्यक्षेत्र में माउस के साथ क्या कर सकते हैं में क्या करना है ....

किसी को भी जानता है कि यह कैसे करना है करता है?

+2

सीधे रास्ता: बस इसे किसी अन्य चर में कॉपी करें और पुराने को नष्ट कर दें। साथ ही, यह [इस प्रश्न] का एक संभावित डुप्लिकेट है (http://stackoverflow.com/questions/5964639/matlab-renaming-workspace-elements-from-command-window)। –

+2

"...डेटा बहुत बड़ा है, जिसका अर्थ है कि मैं इसे किसी अन्य चर में कॉपी नहीं कर सकता हूं और पहले को हटा सकता हूं ... " –

+0

क्रिस: इससे कोई फर्क नहीं पड़ता। MATLAB संदर्भों का उपयोग करता है, ए = बी का मतलब यह नहीं है कि बी की प्रतिलिपि बनाई गई है। –

उत्तर

14

जब चर नाम, matlab uses a "lazy copy" बताए, तो कोई कारण नहीं है:

new_name = old_name; 
clear old_name; 

काम नहीं करना चाहिए।

2

एकमात्र तरीका जिसे मैं स्मृति प्रतिलिपि के बिना ऐसा करने के बारे में सोच सकता हूं, मूल डेटा को उस ऑब्जेक्ट में लपेटना होगा जो हैंडल क्लास का उप-वर्ग है।

http://www.mathworks.co.uk/help/techdoc/matlab_oop/brfylzt-1.html

फिर आप 'प्रतिलिपि' संभाल वर्ग सामान्य वाक्य रचना

classB=classA 

..लेकिन आप केवल एक ही डेटा के लिए एक उपनाम बना रहे हैं का उपयोग कर (classB में परिवर्तन ClassA में परिलक्षित होते हैं) कर सकते हैं । यह matlab में सूचक की तरह अर्थशास्त्र के लिए सबसे नज़दीकी चीज है।

उदाहरण के लिए, myHandle नामक एक फ़ाइल बनाएं और कक्षा को परिभाषित करने के लिए निम्न पाठ पेस्ट करें। ।

classdef myHandle < handle 

    properties 
     data 
     moreData 
    end 

    methods 
    end 

end 

फिर आप इसे नियमित संरचना की तरह उपयोग कर सकते हैं। कमांड लाइन से ..

>> x = myHandle 

x = 

    myHandle handle 

    Properties: 
     data: [] 
    moreData: [] 

    Methods, Events, Superclasses 

... हम फिर डेटा को पॉप्युलेट कर सकते हैं। । ।

>> x.data = [1 2 3 4]; 
>> x.moreData = 'efg'; 

... मूल ऑब्जेक्ट डेटा के साथ पॉप्युलेट हो जाने के बाद, मूल डेटा का उपनाम टाइप करके किया जा सकता है। ।

>> y = x 

दिलचस्प बात यह है, जब y संशोधित किया गया है x के लिए होता अर्थात

>> y.data = [33 44 55 66]; 
>> disp(x) 
x = 

    myHandle handle 

    Properties: 
     data: [33 44 55 66] 
    moreData: 'f' 

    Methods, Events, Superclasses 

यहां तक ​​कि आप स्पष्ट उर्फ ​​नामों में से एक। ।

clear x 

..और डेटा अभी भी डेटा, y के लिए अन्य हैंडल में उपलब्ध हो जाएगा। स्मृति केवल तभी मुक्त होती है जब इसका कोई और संभाल नहीं होता है (जब reference count शून्य तक पहुंच गया है)।