изменение имени переменной matlab

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

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

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

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

2 ответов


при назначении имен переменных,matlab использует "ленивую копию", поэтому нет причин, почему:

new_name = old_name;
clear old_name;

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


единственный способ, который я могу придумать, чтобы сделать это без копии памяти, - это обернуть исходные данные в объект, который является подклассом класса 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

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

>> 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. Память освобождается только тогда, когда больше нет дескрипторов, ссылающихся на нее (когда счетчик ссылок достиг ноль).