メインコンテンツ

インデックス付き代入

MATLAB では、インデックス付き代入を使用して配列の特定の要素を変更できます。この例では、インデックス付き代入を使用して、ベクトル要素を変更し、スカラー拡張を実行し、配列の拡張を実現する方法を示します。インデックスなしで既存の配列に新しい値を代入すると、配列全体が上書きされます。ただし、インデックスを使用して新しい値を代入すると、MATLAB は新しい値のデータ型を既存の配列のデータ型と一致するように変換します。データ型に互換性がない場合、代入はエラーになります。

インデックスを使用した配列要素の変更

特定の要素に新しい値を代入することで、既存の配列の要素を変更できます。これを行うには、代入演算子 = の左辺でインデックス式を使用して既存の配列の要素を選択し、この演算子の右辺で新しい値を代入します。

ベクトル要素の変更

1 行 4 列のゼロのベクトルを作成します。

v = zeros(1,4)
v = 1×4

     0     0     0     0

v の 2 番目、3 番目、および 4 番目の要素をそれぞれ 10、15、および 20 に置き換えます。置換する要素のインデックスを代入演算子の左辺に指定し、右辺に新しい値を指定します。

v(2:4) = [10 15 20]
v = 1×4

     0    10    15    20

スカラー拡張の実行

ほとんどの場合、右辺の要素の数は、左辺のインデックスの要素の数と一致する必要があります。ただし、MATLAB では、右辺の単一のスカラー値を拡張して左辺の複数の要素を置き換える "スカラー拡張" がサポートされています。

たとえば、v の最初、2 番目、3 番目の要素を 30 に置き換えます。

v(1:3) = 30
v = 1×4

    30    30    30    20

配列の拡張の実現

配列の現在の範囲外のインデックスを指定して既存の配列に新しい値を代入すると、MATLAB は配列を自動的に "拡張" します。このプロセスでは、MATLAB は新しい値に対応できるように配列のサイズを拡張し、それらの値を配列に追加します。数値配列を拡張する場合、MATLAB は未指定の要素を 0 で埋めます。

たとえば、6 番目と 8 番目の要素に新しい値を代入して、ベクトル v を拡張します。MATLAB は v のサイズを 1 行 8 列に拡張し、6 番目と 8 番目の要素にそれぞれ新しい値 2 と 3 を代入し、5 番目と 7 番目の要素を 0 に設定します。

v([6 8]) = 2:3
v = 1×8

    30    30    30    20     0     2     0     3

行列を拡張するには、現在の行列サイズの範囲外にある行列の行位置と列位置の 2 つの添字インデックスを指定します。たとえば、2 行 2 列の行列を作成します。

A = [2 3; -3 2]
A = 2×2

     2     3
    -3     2

A の 4,4 の位置にある要素に新しい値を代入して、行列 A を 4 行 4 列に拡張します。ここで、MATLAB は 4,4 の位置にある要素に新しい値 5 を代入し、拡張された配列内の未指定の要素を 0 に設定します。

A(4,4) = 5
A = 4×4

     2     3     0     0
    -3     2     0     0
     0     0     0     0
     0     0     0     5

配列の上書きとデータ型の変換

インデックスを使用せずに配列に新しい値を代入すると、MATLAB は既存の配列を、指定された値から構築された新しい配列に置き換えます。MATLAB は、配列のサイズ、データ型、その他の属性など、元の配列の以前の状態を破棄し、実質的に変数名をリセットして、新しく代入された配列を格納します。インデックスを使用して配列に新しい値を代入すると、MATLAB は値を既存の配列のデータ型に変換しようとします。

配列全体の置換

複素数値を含む 3 行 2 列の行列 A を作成します。whos 関数を使用して、この行列の既存のサイズ、クラス、および属性を確認します。行列のデータ型は、complex 属性をもつ既定の double 型です。

A = [pi 3; 1i 0; 1-2i 5]
A = 3×2 complex

   3.1416 + 0.0000i   3.0000 + 0.0000i
   0.0000 + 1.0000i   0.0000 + 0.0000i
   1.0000 - 2.0000i   5.0000 + 0.0000i

whos A
  Name      Size            Bytes  Class     Attributes

  A         3x2                96  double    complex   

インデックスなしで A に新しい値を代入すると、代入によって A が再作成されます。

A = int16([1 2; 3 4])
A = 2×2 int16 matrix

   1   2
   3   4

Adouble 型の行列ではなくなり、属性のない int16 型 (16 ビット符号付き整数) の 2 行 2 列の行列になります。A の既存のサイズ、クラス、および属性を確認します。

whos A
  Name      Size            Bytes  Class    Attributes

  A         2x2                 8  int16              

インデックス付き代入を使用したデータ型の変換

既存の配列にインデックス付き代入を実行すると、MATLAB は可能な限り配列の以前の状態を保持します。MATLAB は、代入演算子の右辺の新しい値を、左辺の配列の既存のデータ型に変換します。データ型が変換可能でない場合、代入はエラーになります。

たとえば、前の行列 A の最初の行と列の要素に値 2.8 を代入します。

A(1,1) = 2.8
A = 2×2 int16 matrix

   3   2
   3   4

ここで、MATLAB は代入される値を A の既存の int16 データ型に変換します。この変換により、値 2.8 は最も近い整数である 3 に丸められます。この代入後、A がそのサイズ、クラス、および属性を保持していることを確認します。

whos A
  Name      Size            Bytes  Class    Attributes

  A         2x2                 8  int16              

参考

| | | |

トピック