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