Programming and Data Types | ![]() ![]() |
MATLABは、実際の大きさに関係なく、値の列として各々の配列をストアしています。この列は、配列の列の後ろにつぎの列をくっ付けて、またくっ付けての繰り返しで作成しています。
たとえば、MATLABがつぎの行列をストアしているとします。
A = [2 6 9; 4 2 8; 3 0 1]
2 4 3 6 2 0 9 8 1
単一サブスクリプトインデックスにストレージ列の中に直接アクセスします。A(3)
は、列の中の3番目にアクセスし、数値3になります。A(7)
は、7番目の値で、9になります。
多くのサブスクリプトを与えると、MATLABはユーザが設定した配列をベースにストレージ列の中のインデックスを計算します。たとえば、A
を2次元配列[d1
d2]
と考えましょう。ここで、d1
は配列の行数で、d2
は列数です。行と列を表す2つのサブスクリプト(i,j)
を与えると、オフセットはつぎのようになります。
(j-1)*d1+i
A(3,2)
を与えると、MATLABは、Aのストレージ列を
(2-1)*3+3
、または、6
になります。列の要素番号6
を見ると、0
になります。
Indexing Into Multidimensional Arrays
このストレージやインデックス法を多次元配列に拡張します。この場合、MATLABはストレージ列を作成するページをベースに機能し、列方向に要素を付け加えて行きます。
再び、単一サブスクリプトは、この列の中に直接インデックスを付けます。例えば、C(4)
は、つぎの結果になります。
ans = 0
2つのサブスクリプト(i,j)
を使って行と列のインデックスを設定すると、MATLABは上で記述したようにオフセットを計算します。2つのサブスクリプトは、オリジナルの配列次元の範囲で設定されているなら、多次元配列の最初のページを常にアクセスします。
複数のサブスクリプトが存在すると、すべてのサブスクリプトがオリジナル配列の次元内になければなりません。たとえば、C
は5つの行しかないので、C(6,2)
はまちがいです。
2つ以上のサブスクリプトがあれば、MATLABはそのインデックスの設定法に従って、拡大していきます。たとえば、4次元配列の中でサイズ[d1
d2 d3 d4]
をもつ4つのサブスクリプト(i,j,k,l)
を考えます。MATLABは、つぎのようにストレージ列の中でオフセットを計算します。
(l-1)(d3)(d2)(d1)+(k-1)(d2)(d1)+(j-1)(d1)+i
たとえば、サブスクリプト(3,4,2,1)を使って配列C
のインデックスは、値5を出力します(ストレージ列の中の38番目)。
一般的に、サブスクリプト(s
1
s
2 s
3 ... s
n)
を使った次元[d
1
d
2 d
3 ... d
n]
をもつ配列に対するオフセットの式は、
(sn-1)(dn-1)(dn-2)...(d1)+(sn-1-1)(dn-2)...(d1)+...+(s2-1)(d1)+s1
この方法により、サブスクリプトの番号を使って配列にインデックスを付けることができます。1と言う数字をもったものをサブスクリプトリストに付けるには、0になるので、
C(3,2,1,1,1,1,1,1)
C(3,2)
![]() |
サブスクリプトとインデックス | 文字列の計算 | ![]() |