• 行列の連結演算子、||と|/は行列に行または列を動的に追加します。しかしながら、これらを使用せず、静的な方法で行列を定義すると、スクリプトはより高速に実行されます。
// より速い例
t1 = Tick Seconds();
A = J( 10, 10000, . );
For( i = 1, i <= 10000, i++,
a2 = J( 10, 1, Random Gamma( 1, 1 ) );
// a2にガンマ分布に従う乱数の10行1列のベクトルを設定する
A[0, i] = a2;
/* 行列Aのi番目の列に
a2の値を代入する。最初の引数0は、「すべての行」を表す */
);
t2 = Tick Seconds();
Show( t2 - t1 );
t2 - t1 = 0.0166666666627862;
// より遅い例
t3 = Tick Seconds();
B = J( 10, 0, . );
For( i = 1, i <= 10000, i++,
a2 = J( 10, 1, Random Gamma( 1, 1 ) );
B = B || a2;
);
t4 = Tick Seconds();
Show( t4 - t3 );
t4 - t3 = 3.1333333333605;
• 必要とする行列のサイズがわかっている場合、通常、行列全体を最初に作成してから、値を設定し直すほうが速くなります。下の例では、J()関数が100000行1列の行列を一度に作成しています。
Delete Symbols( a1, a2, ... );
// より速い例
t1 = Tick Seconds();
a1 = J( 100000, 1, Random Uniform() );
t2 = Tick Seconds();
Show( t2 - t1 );
Delete Symbols( a1 );
t2 - t1 = 0;
// より遅い例
t3 = Tick Seconds();
a2 = J( 0,0 );
For( i = 1, i <= 100000, i++,
a2 |/= Random Uniform()
);
t4 = Tick Seconds();
Show( t4 - t3 );
t4 - t3 = 5.05000000004657;
• 通常、数値を格納するには、データテーブルではなく行列を使用したほうが速く処理できます。