2012-02-01 17 views
7

Dire che ho un file .mat con diverse istanze della stessa struttura, ognuna con un nome di variabile diverso.caricamento di una variabile da un file .mat in una variabile con un nome diverso

Voglio elaborare ogni istanza trovata in un file (che trovo usando whos('-file' ...). Speravo che load mi permettesse di specificare il nome di destinazione di una variabile in modo che non dovessi preoccuparmi delle collisioni (e quindi non dovevo scrivere codice auto-modificante a la eval).

Il modo la forza bruta per fare questo sembra essere la creazione di una funzione di supporto che, usando le variabili con nomi che si spera non siano in contrasto con il contenuto .mat, fa qualcosa di simile:

  1. Does un whos su il file per ottenere i nomi contenuti.
  2. Caricare iterativamente ogni struttura contenuta.
  3. Utilizza eval per assegnare la struttura caricata in, ad esempio, una matrice di celle (dove una colonna della matrice contiene i nomi della struttura del file .mat e una colonna corrispondente con il contenuto effettivo di ogni struttura dal file .mat).

Non c'è un modo più elegante per realizzare la stessa cosa?

risposta

8

Certo che puoi! Basta usare load con un argomento di output.

x = 1; 
save foo; 

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

bello. Ho ripetutamente osservato la pagina di manuale 'load' che si chiedeva" qual è il valore di ritorno di un 'array di struttura' che dovrebbe essere? " Adesso lo so! – jhfrontz

4

è possibile load i dati in un file MAT in una struttura

ws = load('matlab.mat'); 

i campi della struttura ws saranno le variabili presenti nel file MAT. È quindi possibile anche avere un array di celle di strutture

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

Esempio

>> 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 
Problemi correlati