私の中で以前のJSLのヒント 、リストアイテムよりもマトリックスアイテムにアクセスする方が速いのがわかりました。あなたがまったくアイテムにアクセスする必要がないならば、それはまだより速いです。つまり、JMPの内部コードで、JSLコードではなく、ループとアイテムアクセスを実行するようにします。各項目に単純な機能を適用するだけの場合は、それを実行できます。
ループを思い出して、奇数の(1次元)行列を作成します。
// 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までの要素を含む1次元行列を作成します。スカラー演算を行列に適用すると、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 ...
としてコメンターMichael 前述のように、Index関数は実際には増分である3番目の引数を取ることができるので、奇数の例はさらに単純化できます。だから我々は最初のn個の奇数を得ることができる:
y = Index( 1, n * 2, 2 ); // odd numbers from 1 to 2n