2010-09-07 8 views
0

Si j'utilise la fonction de charge par Matlab je normalement finir par faire quelque chose comme ceci:Matlab: Chargement de fichiers

temp = load('filename.mat'); 
realData = temp.VarName; 
clear temp 

ou

realData = load('filename.mat'); 
realData = realData.VarName; 

est une de ces méthodes superiour à l'autre, en particulier en termes d'utilisation de la mémoire? Ou y a-t-il une approche plus directe pour éviter cette structure temporaire?

Thx Thomas

Répondre

0

Eh bien, si vous venez load('filename.mat');, toutes les variables finissent dans le périmètre actuel.

Je doute cependant que le coût de la mémoire soit significatif pour l'une ou l'autre de vos méthodes. Matlab utilise la copie sur écriture.

+0

Mais si vous voulez utiliser load() dans une fonction, il n'est pas nécessaire qu'ils se retrouvent dans l'espace de travail ?! De plus dans le premier cas, n'y a-t-il pas temporairement la taille 2x de la variable utilisée? – Thomas

+2

@Thomas: Désolé, j'ai corrigé ma modification. Ils finissent dans la portée actuelle. Non, il n'y a pas deux fois plus de mémoire utilisée, car dans les coulisses, 'realData' et' temp.varName' pointeront sur la même structure de données (jusqu'à ce que ces données soient réellement modifiées). –

6

Si vous savez que vous avez juste besoin des variables spécifiques de votre matfile, vous pouvez faire

realData = load('filename.mat', 'VarName'); 

Voir la Matlab documentation pour plus d'informations sur la commande de charge.

+0

mais cela va aussi créer une structure. la seule exception est que la structure n'a que realData.VarName au lieu de plusieurs champs possibles. – Thomas

+3

alors faites juste 'load ('filename.mat', 'VarName');' et la variable VarName se retrouvera dans votre portée actuelle, pas dans une structure. – groovingandi

0

Vous pouvez utiliser la commande « importdata »:

szFilePath = 'c:\dirName\myData.mat'; 
    myData = importdata(szFilePath); 

Cela permet d'éviter le placement implicite des variables dans la portée lorsque la charge est utilisée sans argument de sortie, ainsi que la cession-From- inutile struct commande. Comme noté par Oli, le comportement de copie paresseuse (copie à l'écriture) signifie que les considérations de mémoire sont sans intérêt.

D'un point de vue maintenance/lisibilité importdata a deux avantages:

  1. nommant Explicitement les variables qui sont créés dans les documents de l'espace de travail ce que la fonction fait beaucoup plus clairement.
  2. La suppression de la nécessité de l'opération d'affectation à partir de la structure permet de supprimer les opérations gênantes et non pertinentes du fichier source.

J'utilise MATLAB R2010a.

Questions connexes