Je confirme à mon VDD que ca marche avec Matlab/Octave aussi
Ce qu'il faut bien garder en tête en Matlab, c'est que tout est des vecteurs. Du coup les codes sont normalement "simple" à vectoriser. La plupart des boucles est souvent évitable.
Les vecteurs sont très facilement manipulables. Par exemple si tu as un vecteur/matrice B qui possède un ensemble de valeur et que tu veux extraire celle qui sont supérieures à A, l'opération
retourne un vecteur logique avec 0 quand B est inférieur à A, et 1 quand B est supérieur à A.
Du coup, tu peux extraire les valeurs de B supérieures à A grâce à l'indexation logique, c'est-à-dire utiliser le vecteur index
| B_superieur_a_A = B(index)
|
C'est exactement ce que mon VDD a fait
À noter que B soit un vecteur ou une matrice, ca marchera. Les matrices sont en effet stockées sous forme de grand vecteur.
Exemple :
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 | >> A=rand(5) % On crée la matrice
A =
0.7707358 0.9795850 0.1195359 0.0952663 0.7305514
0.4118413 0.8146080 0.7029609 0.6047948 0.8064194
0.6544155 0.1868782 0.8903577 0.7260080 0.8458382
0.0029963 0.1469977 0.8247714 0.0304943 0.7623086
0.7716072 0.1342229 0.1388872 0.2590260 0.4139388
>>> A>0.5 % On crée un vecteur logique pour les valeurs de A supérieures à 0.5
ans =
1 1 0 0 1
0 1 1 1 1
1 0 1 1 1
0 0 1 0 1
1 0 0 0 0
>>> A(ans) % On extrait les valeurs de A grâce au vecteur logique.
ans =
0.77074
0.65442
0.77161
0.97958
0.81461
0.70296
0.89036
0.82477
0.60479
0.72601
0.73055
0.80642
0.84584
0.76231
|
Attention petit exercice maintenant (juste pour le fun) !
J'ai 2 matrices taille
et poids
, est-ce que tu peux extraire la taille des personnes qui font plus de 65 kg ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | >> poids=60+rand(5)*10 % poids en kg
poids =
62.081 62.836 69.842 69.180 64.492
65.649 68.200 62.832 69.286 62.689
69.446 65.954 68.616 68.964 61.011
67.353 64.217 68.003 67.550 63.983
65.850 64.565 66.210 65.789 67.265
>> taille=160+rand(5)*10 % taille en cm
taille =
162.73 167.90 163.95 162.78 160.36
162.16 163.54 166.51 169.08 167.17
162.82 165.82 166.53 161.53 168.30
164.80 162.06 161.87 167.95 164.84
160.32 168.39 163.49 163.55 165.35
|
Et sa solution :
Première solution :
| resultat=taille(poids>65)
|
Deuxième solution, un peu plus détaillée :
| idx=poids>65;
resultat=taille(idx)
|
Avec une boucle ca marcherait aussi… Mais ca serait beaaaaaaaucoup plus lourd à écrire, et pour de grande matrice le code serait beaaaaaaaucoup plus long