次の例を考えます。
>> I=[2 1 3;3 2 4]
I =
2 1 3
3 2 4
>> I(:)
ans =
2
3
1
2
3
4
>> I(1:2)
ans =
2 3
短い行ベクトルを返すのに、なぜI(:)
列ベクトルを返すのですか?I(1:2)
次の例を考えます。
>> I=[2 1 3;3 2 4]
I =
2 1 3
3 2 4
>> I(:)
ans =
2
3
1
2
3
4
>> I(1:2)
ans =
2 3
短い行ベクトルを返すのに、なぜI(:)
列ベクトルを返すのですか?I(1:2)
構文は(:)
、方程式の右辺のインデックスとして使用される場合、任意の次元の行列全体を単一の列ベクトルに再形成する特別な操作です。したがって、次の 2 行のコードは同じ結果になります。
a = I(:); % Create a column vector with ":"
a = reshape(I, [], 1); % Create a column vector with RESHAPE
1 つのコロンの両側に数値が含まれている場合は、配列内の線形インデックスの範囲を示します。したがってI(1:2)
、最初と 2 番目の要素I
(つまり、最初の列の値) を選択します。覚えておくべきことの 1 つは、この構文1:2
は実際には vector を作成する[1 2]
ためI(1:2)
、 と同じであるということI([1 2])
です。線形インデックス[1 2]
は行ベクトルであるため、返される値は行ベクトルとして形成されます[2 3]
。I([1; 2])
インデックスまたはを使用する場合I((1:2).')
、線形インデックスは列ベクトルであるため、返される値は列ベクトルとして整形されます[2; 3]
。
コンマで区切られた複数のインデックスがある場合、インデックスは、インデックス付けされている行列のさまざまな次元に適用されます。たとえば、I(1:2, 1:2)
は 2 行 2 列の行列を返し[2 1; 3 2]
ます。インデックスの最初1:2
のものが行に適用されるため、行 1 と 2 が選択されます。インデックスの 2 番目1:2
が列に適用されるため、列 1 と 2 が選択されます。
コロン演算子と行列インデックスについて説明している MATLAB ドキュメンテーションは、効果的な使用方法をよりよく理解するのに役立ちます:
。
Matlab のインデックス作成の例
[行、列] = サイズ (M); % M は行 x 列の行列です
行 i、列 j のエントリへのアクセス:
x = M(i,j);
行 i のすべてのアイテムにアクセスする:
r = M(i,:);
列 j のすべてのアイテムにアクセスする:
c = M(:,j);
M をベクトルとして扱い、行 i、列 j のエントリにアクセスします。
x = M(行*(j-1)+i);
行 i から行 j まで、および列 p から列 q までの部分行列にアクセスします。
S = M(i:j,p:q);
マトリックス全体へのアクセス (冗長):
M = M(:,:);
説明
コロン演算子は、インデックスの範囲 (1:2 は 1 から 2 までの範囲のインデックスであり、3:5 は範囲 3、4、5 を示します) を与えるか、指定された次元の範囲全体を与えます (ない場合)。範囲が指定されています。
これは、単一のインデックスだけで行列にインデックスを付けると、与える代わりに、多くのエントリ (行を下に移動し、列をインクリメントし、最後の行の後に行をリセットする) をステップ実行した結果のエントリが得られるという事実と関連しています。指定した行/列だけが観察につながります。
(:)
列に沿って行列をベクトル化します。つまり、要素は列に沿って読み取られ、単一の列ベクトルに連結されます。からまでa:b:c
の数列を の増分で返します。を省略した場合、デフォルトで に設定されます。a
c
b
b
1
シーケンスa:b:c
を使用して、列に沿って行列を線形にインデックス付けできます。多次元配列のインデックスに使用すると、その次元に沿って要素が選択されます。例えば
I(1,2:3)
1
の行と列2:3
で構成される行列を返しますI
。つまり、[1 3]
また、任意の方法でインデックスに到達し、それをインデックス I に使用できます。
index = [1 2 3];
disp(I(index));
上記は、最初の 3 つの要素を列優先順 (列に沿って) で表示します。つまり、[2 ; 3 ; 1]