| Programming and Data Types | ![]() |
サブスクリプト
この節では、MATLAB行列の要素にアクセスし、割り当てるためのサブスクリプトの使用法を説明します。以下について説明します。
Aのi行、j列の要素は、A(i,j)で定義されています。たとえば、A = magic(4)を考えましょう。ここで、A(4,2)は、4行目の2列目の数値です。この場合、A(4,2)は14です。
A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
A(4,2)
ans =
14
これは、単一サブスクリプトをもつ行列A(k)の要素を考えることもできます。これは、行ベクトル、列ベクトルを作成する一般的な方法です。しかし、フルの2次元行列に適用でき、この場合、配列はオリジナルの行列の列から作られる1つの長い列ベクトルとみなすことができます。
それで、この魔方陣では、A(8)はA(4,2)にストアされている14を表わす、もう1つの方法です。.
A(8)
ans =
14
以下のようにタイプすることにより、Aの4列目の和を計算することができます。
A(1,4) + A(2,4) + A(3,4) + A(4,4)
コロン演算子を使ってこの式のサイズを減らすことができます。コロンに関連するサブスクリプト表現.は、行列の部分を参照します。
A(1:m,n)
は、行列Aの列nの1行からm行の要素を参照します。 この記法を使って、Aの4列目の和をより詳しく計算することができます。
sum(A(1:4,4))
コロンは、行列の行または列内のすべての 要素を参照します。キーワードend は、最後の 行または列を参照します。以下のシンタックスを使って、行番号または列番号を指定せずに同じ列の和を計算することができます。
sum(A(:,end))
ans =
34
さらにコロン演算子を追加することにより、行列内の非連続要素を参照することができます。この式のm:3:nは、行列内のすべての3番目の要素を割り当てることを意味します。
B = A;
B(1:3:end) = -10
B =
-10 2 3 -10
5 11 -10 8
9 -10 6 12
-10 14 15 -10
関数onesを使って配列要素に繰り返しアクセスすることができます。Aの9番目の要素から2行6列の新規の行列を作成するには、つぎのようにします。
B = A(9*ones(2,6))
B =
3 3 3 3 3 3
3 3 3 3 3 3
行列の範囲外の要素にアクセスしようとした場合は、エラーになります。
B = A(4,5) Index exceeds matrix dimensions
しかし、行列の範囲外の要素に値をストアする場合は、行列のサイズは新規の要素をストアするため増加します。
B = A;
B(4,5) = 17
B =
16 2 3 13 0
5 11 10 8 0
9 7 6 12 0
4 14 15 1 17
同様に、一連の行列要素を割り当てることによって、行列を拡大できます。
B(2:5,5:6) = 5
B =
16 2 3 13 0 0
5 11 10 8 5 5
9 7 6 12 5 5
4 14 15 1 5 5
0 0 0 0 5 5
1組の鍵括弧を使うことにより、行列から行と列を削除することができます。以下のように開始します。
X = A;
X(:,2) = []
X =
16 3 13
5 10 8
9 6 12
4 15 1
行列から単一の要素を削除する場合は、結果は、行列ではありません。そのため、以下のような式
X(1,2) = []
は、エラーになります。しかし、単一のサブスクリプトの利用は、単一要素、あるいは、一連の要素を削除し、残りの要素を行ベクトルに変形します。そのため、
X(2:2:10) = []
X =
16 9 3 6 13 12 1
連結は、小さい行列を合わせてより大きい行列を作る過程です。実際は、最初の行列も個々の要素を連結したものです。鍵括弧[]の組は、連結演算子です。例題として、4行4列の魔方陣Aから始め、以下を作成します。
B = [A A+32;A+48 A+16]
結果は、4つのサブ行列を連結することにより得られた8行8列行列です。
B =
16 2 3 13 48 34 35 45
5 11 10 8 37 43 42 40
9 7 6 12 41 39 38 44
4 14 15 1 36 46 47 33
64 50 51 61 32 18 19 29
53 59 58 56 21 27 26 24
57 55 54 60 25 23 22 28
52 62 63 49 20 30 31 17
この行列は、別の魔方陣を作る途中の結果です。要素は、整数1:64を再配置したものです。列の和は、8行8列の魔方陣に対して正しい値です。
sum(B)
ans =
260 260 260 260 260 260 260 260
しかし、行の和sum(B')'は、すべて同じではありません。これを正しい8行8列の魔方陣にするためには、さらに操作が必要です。
| プライベート関数 | アドバンストなインデックス | ![]() |