2012-02-01 16 views
7

Digamos que tengo un archivo .mat con varias instancias de la misma estructura, cada una con un nombre de variable diferente.cargando una variable de un archivo .mat en una variable de nombre diferente

Quiero procesar cada instancia encontrada en un archivo (que encuentro usando whos('-file' ...). Esperaba que load me permitiera especificar el nombre de destino de una variable para que no tuviera que preocuparme por las colisiones (y para no tener que escribir el código de auto modificación a la eval).

La forma en la fuerza bruta para hacer esto parece ser la creación de una función de ayuda que, utilizando las variables con nombres que esperemos no entren en conflicto con el contenido .mat, hace algo como:

  1. ¿Un whos en el archivo para obtener los nombres contenidos.
  2. Carga de forma iterativa cada estructura contenida.
  3. Usa eval para asignar la estructura cargada en, por ejemplo, una matriz de celdas (donde una columna de la matriz contiene los nombres de estructura del archivo .mat y una columna correspondiente con los contenidos reales de cada estructura del archivo .mat).

¿No hay una forma más elegante de lograr lo mismo?

Respuesta

8

¡Por supuesto que puede! Solo use load con un argumento de salida.

x = 1; 
save foo; 

ls = load('foo.mat'); 
ls.x 
+0

agradable. Repetidamente miré la página del manual 'load' preguntándome" ¿cuál es el valor de retorno de una 'estructura matriz' que se supone que es? " ¡Ahora sé! – jhfrontz

4

se puede load los datos en un archivo MAT en una estructura

ws = load('matlab.mat'); 

los campos de la estructura ws serán las variables en el archivo MAT. A continuación, puede incluso tener un conjunto de celdas de las estructuras

ws{1}=load('savedWorkSpace_1.mat'); 
ws{2}=load('savedWorkSpace_2.mat'); 

Ejemplo

>> x = 1; 
>> save ws_1; 
>> x = 2; 
>> y = 1; 
>> save ws_2 
>> clear 
>> ws{1} = load('ws_1.mat') 
>> ws{2} = load('ws_2.mat') 
>> ws{1}.x 
    x = 1 
>> ws{2}.x 
    x = 2 
Cuestiones relacionadas