公開日: 04/01/2021

行列の使用

行列の連結演算子、|||/は行列に行または列を動的に追加します。しかしながら、これらを使用せず、静的な方法で行列を定義すると、スクリプトはより高速に実行されます。

// より速い例

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;

通常、数値を格納するには、データテーブルではなく行列を使用したほうが速く処理できます。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).