公開日: 09/19/2023

行列の添え字

JSLで添え字演算子([ ])を使うと、行列から要素や部分行列を取り出せます。Subscript()関数は通常、対象となる行列の後に、行と列を表す引数を大括弧で囲んで記述します。

単一要素の抽出

A[i,j]は、行列Aからij列の要素を取り出し、スカラーとして戻します。同じ機能を持つ関数は、Subscript(A,i,j)です。

P = [1 2 3, 4 5 6, 7 8 9];
P[2, 3]; // 6を戻す
Subscript( P, 2, 3 ); // 6を戻す

変数testに、行列Aの3行目の1列目の値(5)を割り当てます。

A = [1 2, 3 4, 5 6];
test = A[3, 1];
Show( test );

test = 5;

行列やリストによる添え字

部分行列を抽出するには、行列やリストによる添え字を使用します。選択された行と列の行列が戻されます。次の式では、2行目と3行目の1列目と3列目を抽出します。

P = [1 2 3, 4 5 6, 7 8 9];
P[[2 3],[1 3]]; // 添え字を行列で指定
P[{2, 3},{1, 3}]; // 添え字をリストで指定

この2つはどちらも次のような結果になります。

[4 6,

7 9]

1つしか引数をとらない添え字

添え字の引数を1つだけ指定した場合、その添え字は、すべての行を連結して1つの行にした形での通し番号になります。このため、引数を2つ指定する場合のA[i,j]は、引数を1つにした場合のA[(i-1)*ncol(A)+j]と同じになります。

Q = [2 4 6, 8 10 12, 14 16 18];
Q[8]; // Q[3,2]と同じ

16

以下の例は、すべて列ベクトル[10, 14, 18]を戻します。

Q = [2 4 6, 8 10 12, 14 16 18];
Q[{5, 7, 9}];
Q[[5 7 9]];
ii = [5 7 9];
Q[ii];
ii = {5, 7, 9};
Q[ii];
Subscript( Q, ii );

以下のスクリプトでは、行列Pの1~9番目までの値を順に戻します。

P = [1 2 3, 4 5 6, 7 8 9];
For (i = 1, i <= 3, i++,
	For( j = 1, j <= 3, j++,
		Show( P[i, j] )
	)
);

行および列の削除

行または列の削除は、空の行列をその行または列に割り当てることによって実行できます。

A[k, 0] = [];  // k番目の行を削除する
A[0, k] = [];  // k番目の列を削除する

行全体または列全体を選択する

添え字の引数を0にすると、すべての行または列を指定できます。

P = [1 2 3, 4 5 6, 7 8 9];

2列目を選択します。

P[0, 2];

[2, 5, 8]

3列目と2列目を選択します。

P[0, [3, 2]];

[3 2, 6 5, 9 8]

3行目を選択します。

P[3, 0];

[7 8 9]

2行目と3行目を選択します。

P[[2, 3], 0];

[4 5 6, 7 8 9]

すべての列と行を選択します(行列全体)。

P[0, 0];

[1 2 3, 4 5 6, 7 8 9]

添え字を使った代入

添え字を使って、行列内の値を変更することができます。添え字として、スカラーや、行列またはリスト、またはすべての行や列を意味する数0を指定できます。挿入する行や列の次元は、挿入される要素の次元と一致しているか、または、要素は指定された箇所に繰り返し挿入される必要があります。

2行目の3列目の値を99に変更します。

P = [1 2 3, 4 5 6, 7 8 9];
P[2, 3] = 99;
Show( P );

P=[1 2 3, 4 5 99, 7 8 9]

4つの位置の値を変更します。

P = [1 2 3, 4 5 6, 7 8 9];
P[[1 2], [2 3]] = [66 77, 88 99];
Show( P );

P=[1 66 77, 4 88 99, 7 8 9]

1つの列にある3つの値を変更します。

P = [1 2 3, 4 5 6, 7 8 9];
P[0, 2] = [11, 22, 33];
Show( P );

P=[1 11 3, 4 22 6, 7 33 9]

1つの行にある3つの値を変更します。

P = [1 2 3, 4 5 6, 7 8 9];
P[3, 0] = [100 102 104];
Show( P );

P=[1 2 3, 4 5 6, 100 102 104]

1行のすべての値を同じ値に変更します。

P = [1 2 3, 4 5 6, 7 8 9];
P[2, 0] = 99;
Show( P );

P=[1 2 3, 99 99 99, 7 8 9]

代入演算子

行列や行列の添え字に、代入演算子(+=など)を使用することができます。たとえば、次の例では、行列のi行j列の要素に1を加えます。

P = [1 2 3, 4 5 6, 7 8 9];
P[1, 1] += 1;
Show( P );

P=[2 2 3,

4 5 6,

7 8 9];

 
P[1, 1] += 1;
Show( P );

P=[3 2 3,

4 5 6,7 8 9];

行と列の範囲指定

添え字の範囲を指定した行列を作成するには、Index()関数、または::を使用します。

T1 = 1 :: 3; // ベクトル[1 2 3]を作成する
T2 = 4 :: 6; // ベクトル[4 5 6]を作成する
T3 = 7 :: 9; // ベクトル[7 8 9]を作成する
T = T1 |/ T2 |/ T3; // ベクトルを1つの行列に連結する
T[1 :: 3, 2 :: 3]; // 1行目から3行目の2列目と3列目を参照する

[2 3, 5 6, 8 9]

T[Index( 1, 3 ), Index( 2, 3 )]; // Index 関数と等価

[2 3, 5 6, 8 9]

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