La única manera en que puedo pensar para hacer esto sin una copia de memoria sería envolver los datos originales en un objeto que es una subclase de la clase de control.
http://www.mathworks.co.uk/help/techdoc/matlab_oop/brfylzt-1.html
Puede entonces 'copia' la clase mango utilizando la sintaxis normal de
classB=classA
..pero sólo está haciendo un alias para los mismos datos (cambios en ClassB se reflejan en classA) . Esto es lo más parecido en matlab a la semántica de puntero.
Por ejemplo, cree un archivo llamado myHandle
y pegue el siguiente texto para definir la clase. .
classdef myHandle < handle
properties
data
moreData
end
methods
end
end
Puede utilizar esto como una estructura regular. Desde la línea de comandos, haga ...
>> x = myHandle
x =
myHandle handle
Properties:
data: []
moreData: []
Methods, Events, Superclasses
... podemos completar los datos. . .
>> x.data = [1 2 3 4];
>> x.moreData = 'efg';
... una vez que el objeto original se ha rellenado con los datos, un alias de los datos originales se pueden hacer escribiendo. .
>> y = x
Lo interesante sucede a x
cuando se modifica y
, es decir
>> y.data = [33 44 55 66];
>> disp(x)
x =
myHandle handle
Properties:
data: [33 44 55 66]
moreData: 'f'
Methods, Events, Superclasses
Incluso puede borrar uno de los nombres de alias. .
clear x
..y los datos seguirán estando disponibles en la otra asa para los datos, y
. La memoria solo se libera cuando no hay más identificadores que se refieran a ella (cuando el reference count ha alcanzado cero).
Manera directa: simplemente cópiela en otra variable y destruya la anterior. Además, este es un posible duplicado de [esta pregunta] (http://stackoverflow.com/questions/5964639/matlab-renaming-workspace-elements-from-command-window). –
"...los datos son muy grandes, lo que significa que no puedo copiarlo en otra variable y eliminar el primero ... " –
Chris: No importa MATLAB usa referencias, A = B no significa que B se ha copiado. –