在我的以前的JSL提示 ,我們看到訪問矩陣項比列出項更快。如果你根本不需要訪問這些項目,它會更快。也就是說,獲取JMP的內部代碼來執行循環和項訪問,而不是在JSL代碼中執行。當您只需要為每個項目應用一個簡單的函數時,您就可以這樣做。
回想一下循環來製作一個奇數的(一維)矩陣:
// 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;
);
這是沒有循環的樣子:
// 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;
除了擺脫循環外,我們還使用了不同的矩陣創建函數。m :: n是Index(m,n)的簡寫,它創建了一個包含m到n元素的一維矩陣。當我們將標量運算應用於矩陣時,JMP會將這些運算單獨應用於每個單元格。這樣,我們將循環從JSL轉移到JMP內部。幾乎任何數字函數都可以這種方式應用。
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 ...
如評論員邁克爾如前所述,奇數示例可以更簡化,因為Index函數實際上可以採用第三個參數,這是一個增量。所以我們可以得到前n個奇數:
y = Index( 1, n * 2, 2 ); // odd numbers from 1 to 2n