ejemplo - guardar datos en.mat matlab
¿Cómo puedo mover variables dentro y fuera de una estructura similar a LOAD y SAVE en MATLAB? (1)
¿Hay una forma rápida (es decir, una línea) de volcar una colección de variables "en" una estructura, usando los nombres de las variables como los campos de la estructura? La función "cargar" básicamente hace esto, pero guardar y cargar en un archivo temporal parece feo.
Por ejemplo:
clear
a = ''adsf''
b = rand(10);
x = var2struct(a,b)
x.a
x.b
o mejor aún:
x = var2struct([''a'';''b''])
Además, ¿qué pasa con el reverso (es decir, volcar los valores de campo al ámbito actual como variables nombradas después de los campos) ?:
clear
x.a=''asdf''
x.b=rand(10);
dumpstruct(x)
a
b
Además, aquí hay un hilo de grupo de noticias relacionado.
Además de usar LOAD y SAVE , no hay una función incorporada que yo sepa que haga esto. Sin embargo, puedes hacer tus propias funciones, así:
function s = var2struct(varargin)
names = arrayfun(@inputname,1:nargin,''UniformOutput'',false);
s = cell2struct(varargin,names,2);
end
function struct2var(s)
cellfun(@(n,v) assignin(''base'',n,v),fieldnames(s),struct2cell(s));
end
Trabajando desde el espacio de trabajo base, puede usar estas funciones de esta manera:
a = ''adsf''
b = rand(10);
x = var2struct(a,b);
clear a b
struct2var(x);
Un par de notas:
Si prefiere especificar los argumentos a
var2struct
como los nombres de las variables en lugar de las variables en sí, aquí hay una función alternativa:function s = var2struct(varargin) values = cellfun(@(n) evalin(''base'',n),varargin,''UniformOutput'',false); s = cell2struct(values,varargin,2); end
Y lo usaría desde el espacio de trabajo base de la siguiente manera:
x = var2struct(''a'',''b'');
Desafortunadamente, solo puede usar esta versión de la función para obtener variables del espacio de trabajo base, no del espacio de trabajo de una función.
Una advertencia con la función
struct2var
anterior es que siempre creará las variables en el espacio de trabajo base, no el espacio de trabajo de la función que llamastruct2var
. Para crear variables en un espacio de trabajo que no sea la base, debería usar esta línea en ese espacio de trabajo en lugar de llamar astruct2var
:cellfun(@(n,v) assignin(''caller'',n,v),fieldnames(x),struct2cell(x));