La puissance de clearvars

Pour effacer des variables, tout le monde connait la commande clear , mais quand on veut faire l’inverse c’est à dire ne garder que quelques variables , utiliser clear devient lourd. clear est généralement utilisé pour éviter les problèmes de mémoire avec MATLAB, les fameux OOM : Out of Memory.
Par exemple imaginez un code où vous avez 100 variables et que vous voulez en garder que 2 , vous n’allez pas quand même pas utiliser clear suivi des 98 variables à effacer ! si? ah bon bon beh vous n’êtes pas (encore) un MATLAB Geek alors!!!

  • keep

Pendant des années la référence c’était d’utiliser un fichier sur le FEX : keep.m
A noter ce code MATLAB a été fait dans les années 90 tout de même et
créé avec MATLAB 5.2 (R10) !!!
En 2004 keep.m a aussi été sélectionné comme the POTW (Pick Of The Week) : clear all but specified variables

keep

Pour ne garder que par exemple la variable nommée titi dans ton code , il fallait taper:

>>keep titi

  • clear + regexp

Si tu maitrises les expressions régulières sous MATLAB , donc que tu
utilises la puissance de regexp, tu es un MATLAB Geek !
et donc tu peux faire la commande suivante :

>>clear -regexp ^(?!titi$).

  • clearvars

Et si tu as la chance d’avoir une version MATLAB égale ou supérieure à la R2008a, alors t’embête plus et utilise clearvars avec le flag -except !

>>clearvars -except titi

  • demo

Voici un script qui illustre la méthode ancienne et officielle avec clear et l’autre plus récente avec clearvars. On va pour cela remplir le workspace avec des variables générées avec genvarname . genvarname est très utile pour comme son nom l’indique générer des noms de variables. J’ai ici repris l’exemple 4 de la doc de genvarname et comme certains le remarqueront ça utilise le fameux eval , et le MATLAB geek connait bien l’adage : eval is evil … ça fera sûrement l’objet d’un billet sur ce blog!

clear all
for k = 1:5
    t = clock;
    pause(uint8(rand * 10));
    v = genvarname('time_elapsed', who);
    eval([v ' = etime(clock,t)'])
end

clear method

La commande whos nous a donc retourné 8 variables dans le workspace.
La 1ère méthode avec clear pour ne garder que time_elapsed3, équivalait à ajouter les 7 autres noms des variables à clear

>>clear k t v time_elapsed time_elapsed1 time_elapsed2 time_elapsed4

Cette méthode demande déjà de connaitre tous les noms des autres variables présentes dans le workspace. C’est bien pour ça que clearvars est vraiment pratique lorsqu’on le conjugue avec l’option , le flag -except.
On obtiendra le même résultat en tapant:

>> clearvars -except time_elapsed3

Pour info, la note technique sur le site du support de TMW à ce sujet:
How do I load all variables from a MATLAB file except a few specific variables?

Laisser un commentaire