Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > MATLAB > Téléchargez
Téléchargez Récupérez et commentez les sources et outils mis à disposition par la rubrique MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/01/2008, 16h34   #1
Dut
Responsable MATLAB & Hardware/PC

 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 15 078
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 15 078
Points : 31 151
Points : 31 151
Par défaut Mise en évidence d'élément de matrice à l'affichage dans le Command Window

Suite à cette discussion : [disp] Format spécifique pour un élément d'une matrice

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
function surligne(M,fmt,idx)
%SURLIGNE    Surligne des valeurs à l'affichage d'une matrice
%   SURLIGNE(M,FMT,IDX) permet d'afficher une matrice M suivant le format FMT
%   en mettant en évidence les valeurs identifiées par IDX, soit un vecteur 
%   d'indices linéaires, soit une matrice issue d'une opération logique sur M.
%
%   Exemple 1 :
%               M = rand(3);
%               surligne(M,'%.3f',M>=.5);
%
%   Exemple 2 :
%               M = rand(3);
%               surligne(M,'%.3f',[1 5 8]);
%
%   Voir aussi <a href="matlab:disp">disp</a>
%

%   Auteur: Jérôme Briot (Dut)
%   Contact: dutmatlab#yahoo#fr
%            http://www.developpez.net/forums/member.php?u=125006
%   Création: 28 Décembre 2007
%

nargchk(3,3,nargin);

flag=all(size(M)==size(idx));

if flag    
    idx=idx.';    
else     
    temp=zeros(size(M));
    temp(idx)=1;
    idx=temp.';    
end

M=M.';
str='\n';
sM=size(M);
for n=1:numel(M)   
    if idx(n)       
        str=[str '<a href="">' sprintf(fmt,M(n)) '</a> '];        
    else        
        str=[str sprintf(fmt,M(n)) ' '];        
    end
    if ~mod(n/sM(1),1)
        str=[str(1:end-1) '\n'];
    end        
end

disp(sprintf(str))
Ce qui donne :
Images attachées
Type de fichier : gif exemple.gif (2,1 Ko, 31 affichages)
__________________
Identification de processeur sous MATLAB (3/3) Identification de processeur sous MATLAB (2/3) Mes contributions MATLAB (R2009a - Windows & Linux)

J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2010, 19h32   #2
kmaniche
Membre Expert
 
Avatar de kmaniche
 
Inscription : janvier 2006
Messages : 1 715
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 715
Points : 1 632
Points : 1 632
Je trouve que cette discussion prendra une bonne place dans la partie FAQ ou Source.

Cette fonction est très, très intéressante ...

__________________
Les règles Les cours La fonction rechercher

N'oubliez pas de mettre en et de voter.

La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !
kmaniche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 18h15   #3
kmaniche
Membre Expert
 
Avatar de kmaniche
 
Inscription : janvier 2006
Messages : 1 715
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 715
Points : 1 632
Points : 1 632
J'ai eu besoin de cette fonction, mais le résultat ne me plais pas beaucoup, un problème de format de donnée et espacement entre les colonnes :

La matrice m :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>> m=randi([0 255], 15,15)

m =

   211   141   150    91   218    29    94    96   138   186    57   159   112   193   117
    48     8   105    18   246    13   169   224    79    90   137    83   244    88   158
   113    13    79   151   173    77    43   200    18   199   195   205    31   107   238
   100   206    67   233   103   148    71   119    46   111    88   255   120    39   213
   211   115   194    49   239   135    50   208    23   111   118   251   219   209   229
   173    97   254   110   122   230    49   230   118    12   163    32    11   159   149
    53   202    47   191    59   138    83   109     2    12   234    59   177   189   149
    81    93   199    10   101   110   225    85   234    23    41     6   250   206   218
    34   136    50   242   180   138   120   152   164   152   183   155    72    17     8
   171   182   254   195   142   182   103   230     0    61   147    28    34   243   226
   146   223   205   143   193     4    45   179     7   215   110   104   175   127   104
    43    84   108    47   254   205   248    96    53   219   226   226   232   193     9
    37   166   186   127   246    36   104   188   116   246   100   140   156   190   191
   121   249   127   132   136   122   216   244    32   125    45    94   230   212    39
   232    19   207   254   246    65   157   138     2    56   162    53    49    40    36
le résultat :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>> surligne(fix(m), '%d', m<10)

211 141 150 91 218 29 94 96 138 186 57 159 112 193 117
48 8 105 18 246 13 169 224 79 90 137 83 244 88 158
113 13 79 151 173 77 43 200 18 199 195 205 31 107 238
100 206 67 233 103 148 71 119 46 111 88 255 120 39 213
211 115 194 49 239 135 50 208 23 111 118 251 219 209 229
173 97 254 110 122 230 49 230 118 12 163 32 11 159 149
53 202 47 191 59 138 83 109 2 12 234 59 177 189 149
81 93 199 10 101 110 225 85 234 23 41 6 250 206 218
34 136 50 242 180 138 120 152 164 152 183 155 72 17 8
171 182 254 195 142 182 103 230 0 61 147 28 34 243 226
146 223 205 143 193 4 45 179 7 215 110 104 175 127 104
43 84 108 47 254 205 248 96 53 219 226 226 232 193 9
37 166 186 127 246 36 104 188 116 246 100 140 156 190 191
121 249 127 132 136 122 216 244 32 125 45 94 230 212 39
232 19 207 254 246 65 157 138 2 56 162 53 49 40 36
Donc pour le résoudre, j'ai fais ceci :

Code :
1
2
3
4
5
6
7
8
9
10
11
for n=1:numel(M)   
    if idx(n)       
        str=[str '<a href="">' sprintf(fmt,M(n)) '</a>' sprintf('\t')];        
    else        
        str=[str sprintf(fmt,M(n)) sprintf('\t')];        
    end
    if ~mod(n/sM(1),1)
        str=[str(1:end-1) '\n'];
    end        
end
Reste un tout petit inconvénient, les valeurs sont aligné à gauche de la colonne et non à droite comme le fait matlab par défaut !
__________________
Les règles Les cours La fonction rechercher

N'oubliez pas de mettre en et de voter.

La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !
kmaniche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 20h23   #4
Dut
Responsable MATLAB & Hardware/PC

 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 15 078
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 15 078
Points : 31 151
Points : 31 151
Pas besoin de modifier la fonction.

Il suffit de modifier le second argument d'entrée :

Code :
surligne(fix(m), '%3d', m<10)
ou
Code :
surligne(fix(m), '%3d\t', m<10)
Lire la documentation de la fonction FPRINTF pour les différents formats disponibles
__________________
Identification de processeur sous MATLAB (3/3) Identification de processeur sous MATLAB (2/3) Mes contributions MATLAB (R2009a - Windows & Linux)

J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 21h55   #5
kmaniche
Membre Expert
 
Avatar de kmaniche
 
Inscription : janvier 2006
Messages : 1 715
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 715
Points : 1 632
Points : 1 632
OK, ça marche. Peut-on changer la couleur par exemple mettre en rouge ?
__________________
Les règles Les cours La fonction rechercher

N'oubliez pas de mettre en et de voter.

La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !
kmaniche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2010, 22h47   #6
Dut
Responsable MATLAB & Hardware/PC

 
Avatar de Dut
 
Inscription : novembre 2006
Messages : 15 078
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 15 078
Points : 31 151
Points : 31 151
Pour une version plus évoluée : cprintf - display formatted colored text in the Command Window

Citation:
Warning:
This code heavily relies on undocumented and unsupported Matlab functionality. It works on Matlab 7+, but use at your own risk!
__________________
Identification de processeur sous MATLAB (3/3) Identification de processeur sous MATLAB (2/3) Mes contributions MATLAB (R2009a - Windows & Linux)

J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck)
Dut est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h10.


 
 
 
 
Partenaires

Hébergement Web