2011-01-17 7 views
7

codice rilevante:Matlab: caricamento di un file .mat, perché è una struttura? posso semplicemente avere i vars immagazzinati caricati in memoria?

function result = loadStructFromFile(fileName, environmentName) 
    result = load(fileName, environmentName); 


bigMatrix = loadStructFromFile('values.mat','bigMatrix'); 

Ma quando mi guardo allo spazio di lavoro, mostra 'bigMatrix' come struct 1x1. Quando faccio clic sulla struttura, tuttavia, sono i dati effettivi (in questo caso una matrice 998 x 294).

risposta

7

Come la documentazione di LOAD indica, se lo si chiama con un argomento di uscita, il risultato viene restituito in una struttura. Se non lo si chiama con un argomento di output, le variabili vengono create nello spazio di lavoro locale con il nome con cui sono state salvate.

Per la vostra funzione di loadStructFromFile, se il nome della variabile salvata può avere nomi diversi (presumo environmentName), è possibile restituire la variabile scrivendo

function result = loadStructFromFile(fileName, environmentName) 
    tmp = load(fileName, environmentName); 
    result = tmp.(environmentName); 
3

Anche quando basta specificare un unico nome di variabile, LOAD sarà ancora in uscita in una struttura. Nel tuo caso, un'opzione che avete è quella di utilizzare la funzione STRUCT2CELL per convertire l'uscita da LOAD in un array di celle, per poi tornare a questo risultato utilizzando un variable output argument list:

function varargout = loadStructFromFile(fileName,environmentName) 
    varargout = struct2cell(load(fileName,environmentName)); 
end 

Utilizzando VARARGOUT ha l'ulteriore vantaggio che, se environmentName confronta più variabili nel file .MAT, puoi restituirle tutte dalla tua funzione. Ad esempio, se il file .mat ha tre variabili N1, N2 e N3, e environmentName è N*, tutti si possono ottenere chiamando le funzioni con più uscite:

[N1,N2,N3] = loadStructFromFile('values.mat','N*'); 
0

Si tratta di un vecchio post, ma se può essere utile per alcune persone:

quando si carica una struttura, e si desidera assegnare direttamente i sottocampi nella struttura di uscita, è possibile utilizzare structfun e il seguente comando:

bigMatrixOUT = structfun(@(x) x,load('values.mat','bigMatrix')) 

bigMatrixOUT conterrà direttamente i campi di bigMatrix, e non bigMatrixOUT.bigMatrix

Problemi correlati