2012-06-15 3 views
14

Я хочу изменить имя переменной, прежде чем экспортировать ее в глобальную среду, данные очень большие, то есть я не могу скопировать ее в другую переменную и удалить первый.изменение имени переменной matlab

данные загружаются в определенные переменные и что я тоже не могу их изменить, он используется несколько раз в заданиях фона differnet, поэтому я хочу переименовать его и отправить его переименован, чтобы задания не смешивались и после того, как для следующей загрузки рабочих мест и переименовывать снова и т.д.

в основном это сделать в окне командной строки, что я могу сделать с помощью мыши в рабочей области ....

кто-нибудь знает, как это сделать?

+2

Простой способ: просто скопируйте его в другую переменную и уничтожьте старый. Кроме того, это возможный дубликат [этого вопроса] (http://stackoverflow.com/questions/5964639/matlab-renaming-workspace-elements-from-command-window). –

+2

"...данные очень большие, то есть я не могу скопировать его в другую переменную и удалить первый ... » –

+0

Крис: Не имеет значения. MATLAB использует ссылки, A = B не означает, что B копируется. –

ответ

14

При назначении имен переменных, matlab uses a "lazy copy", поэтому нет никаких причин, почему:

new_name = old_name; 
clear old_name; 

не должен работать.

2

Единственный способ, которым я могу думать об этом без копии памяти, это обернуть исходные данные в объект, являющийся подклассом класса handle.

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 

Затем вы можете использовать его, как обычную структуру. Из командной строки do ..

>> x = myHandle 

x = 

    myHandle handle 

    Properties: 
     data: [] 
    moreData: [] 

    Methods, Events, Superclasses 

... мы можем затем заполнить данные. , ,

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

... после того, как исходный объект был заполнен данными, псевдоним исходных данных может быть сделано путем ввода. ,

>> y = x 

Самое интересное происходит с x когда y модифицируется, т.е.

>> 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 достиг нулевой отметки).

Смежные вопросы