In meinem vorheriger JSL-Tipp Wir haben gesehen, dass der Zugriff auf Matrixelemente schneller ist als das Auflisten von Elementen. Es ist noch schneller, wenn Sie nicht auf die Elemente zugreifen müssen. Holen Sie sich also den internen Code von JMP, um die Schleife und den Zugriff auf Elemente auszuführen, anstatt dies in Ihrem JSL-Code zu tun. Sie können dies tun, wenn Sie nur eine einfache Funktion auf jedes Element anwenden müssen.
Rufen Sie die Schleife auf, um eine (eindimensionale) Matrix aus ungeraden Zahlen zu erstellen:
// 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;
);
So sieht es ohne die Schleife aus:
// 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;
Neben dem Entfernen der Schleife haben wir eine andere Funktion zur Matrixerstellung verwendet. m :: n ist die Abkürzung für Index (m, n), wodurch eine eindimensionale Matrix mit den Elementen m bis n einschließlich erstellt wird. Wenn wir Skalaroperationen auf eine Matrix anwenden, wendet JMP diese Operationen auf jede Zelle einzeln an. Auf diese Weise übertragen wir die Schleife von JSL auf JMP-Interna. Nahezu jede numerische Funktion kann auf diese Weise angewendet werden.
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 ...
Wie Kommentator Michael Wie bereits erwähnt, kann das Beispiel für ungerade Zahlen noch vereinfacht werden, da die Indexfunktion tatsächlich ein drittes Argument annehmen kann, das ein Inkrement ist. So können wir die ersten n ungeraden Zahlen erhalten mit:
y = Index( 1, n * 2, 2 ); // odd numbers from 1 to 2n