En mi punta de JSL anterior , vimos cómo es más rápido acceder a los elementos de la matriz que a los elementos de la lista. Es más rápido aún si no tienes que acceder a los elementos en absoluto. Es decir, obtener el código interno de JMP para realizar el bucle y el acceso al elemento en lugar de hacerlo en su código JSL. Puede hacerlo cuando solo necesite aplicar una función simple a cada elemento.
Recuerde el bucle para hacer una matriz (unidimensional) de números impares:
// 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;
);
Esto es lo que parece sin el bucle:
// 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;
Además de deshacernos del bucle, utilizamos una función de creación de matriz diferente. m :: n es la abreviatura de Índice (m, n), que crea una matriz unidimensional con elementos m a n, inclusive. Cuando aplicamos operaciones escalares a una matriz, JMP aplica esas operaciones a cada celda individualmente. De esa manera, transferimos el bucle de JSL a los internos de JMP. Casi cualquier función numérica se puede aplicar de esta manera.
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 ...
Como comentarista Michael Como se señaló anteriormente, el ejemplo de números impares se puede simplificar aún más porque la función de índice puede tomar un tercer argumento, que es un incremento. Entonces podemos obtener los primeros n números impares con:
y = Index( 1, n * 2, 2 ); // odd numbers from 1 to 2n