Dans mon conseil JSL précédent , nous avons vu comment il est plus rapide d’accéder aux éléments de la matrice que de les répertorier. C'est encore plus rapide si vous n'avez pas du tout besoin d'accéder aux éléments. C'est-à-dire que le code interne de JMP effectue le bouclage et l'accès aux éléments au lieu de le faire dans votre code JSL. Vous pouvez le faire lorsque vous devez simplement appliquer une fonction simple à chaque élément.
Rappelez la boucle pour créer une matrice (unidimensionnelle) de nombres impairs:
// make a matrix of odd numbers
n = 1000;
y = J(1, n); // creates a 1 x n matrix with all values set to 1
for (i = 1, i <= n, i++,
y = 2 * i - 1;
);
Voici à quoi ça ressemble sans la boucle:
// make a matrix of odd numbers
n = 1000;
y = 1::n; // creates a 1 x n matrix with all values set to 1..n
y = 2 * y - 1;
En plus de nous débarrasser de la boucle, nous avons utilisé une fonction de création de matrice différente. m :: n est un raccourci pour Index (m, n), qui crée une matrice à une dimension avec les éléments m à n inclus. Lorsque nous appliquons des opérations scalaires à une matrice, JMP les applique à chaque cellule individuellement. De cette façon, nous transférons la boucle de JSL aux composants internes de JMP. Presque n'importe quelle fonction numérique peut être appliquée de cette façon.
Sqrt( y ); // [1 1.41421356 1.7320508 2 2.23606 ...
Power( y, y ); // [1 4 27 256 ...
Log( y ); // 0 0.6931471805 1.09861228 1.38629436 ...
Floor( y / 3 ); // [0 0 1 1 1 2 2 2 3 3 ...
Sine( y / n ); // [0.0009999998 0.0019999986 0.0029999955 ...
Comme commenter Michael Comme indiqué précédemment, l'exemple des nombres impairs peut être simplifié davantage car la fonction Index peut en réalité prendre un troisième argument, qui est un incrément. Nous pouvons donc obtenir les n premiers nombres impairs avec:
y = Index( 1, n * 2, 2 ); // odd numbers from 1 to 2n