はじめに

MATLABは「MATrix LABoratory」という名前の通り、行列を中心とした数値計算を得意とするプログラミング環境です。本記事では「行列演算」というテーマで、以下のポイントを取り上げます。

  1. 行列から行または列を削除する方法
  2. 配列の形状変更および再配列
  3. 配列と行列の演算
  4. 条件を満たす配列要素の検索
  5. 多次元配列

これらのトピックをマスターすることで、複雑な数値処理やシミュレーションを効率的に行うための基礎力が身につきます。

キーワード:MATLAB, 行列演算, 配列, 行の削除, 列の削除, reshape, 要素ごとの演算, find, 論理インデックス, 多次元配列

1. 行列から行または列を削除する

1.1 行や列の削除

MATLABでは、行列から特定の行や列を削除するときに空の配列を代入するテクニックを用います。

A = [1 2 3; 4 5 6; 7 8 9];
disp(A)

% 2行目を削除
A(2,:) = [];
disp('2行目を削除')
disp(A)

上記例では A(2,:) = [] とすることで、2行目(行インデックス=2)のすべての要素を削除しています。「行番号, :」 とすることで2行目の全列を指定し、それを空にすることで行自体が削除されます。同様に、列を削除したい場合は A(:, 列番号) = [] を利用します。

図1.行の削除の例

2. 配列の形状変更および再配列

2.1 reshape関数

行列や配列を別の形状に変形する際には、reshape 関数が有効です。配列の要素数は変わらないまま、行と列の数を再指定できます。

要素の並びは列方向に先に埋められる点に注意が必要です。

B = [1 2 3 4 5 6];
disp(B)

C = reshape(B, [2,3]);
disp('行列Bを2×3行列に変換:')
disp(C)

図2.行列の形状変更

2.2 転置 (transpose) と 行列化

行列の行と列を入れ替える操作は「転置 (transpose)」といい、MATLABでは A’ あるいは transpose(A) と記述します。たとえば、B = [1 2 3 4] を B’ とすると、4×1の列ベクトルになります。

3. 配列と行列の演算

3.1 要素ごとの演算

MATLABでは、行列どうしの掛け算・割り算において、通常の線形代数的な行列演算以外に要素ごとの演算(element-wise operation)を行うことができます。たとえば、記号にドット (.) をつけることで要素ごとの演算となります。

X = [1 2 3];
disp('X = ')
disp(X)
Y = [4 5 6];
disp('Y = ')
disp(Y)

% 要素ごとの積 (.*)
Z_mul = X .* Y; 
disp('X * Y = ')
disp(Z_mul)

% 要素ごとの除算 (./)
Z_div = X ./ Y;
disp('X / Y = ')
disp(Z_div)

図3.要素ごとの演算

3.2 行列演算 vs 要素ごとの演算

  • A * B: 線形代数的な行列積(AとBの次元が内積可能な場合)
  • A .* B: 各要素を対応させて掛け算する

同様に、累乗(^ vs. .^)や除算(/ vs. ./)もドットの有無で挙動が変わります。

表1.行列演算と要素ごとの演算の比較表

種類演算子 / 関数説明使用例
加算+行列同士を要素ごとに加算C = A + B
減算行列同士を要素ごとに減算C = A – B
要素ごとの乗算.*行列の要素ごとに乗算C = A .* B
要素ごとの除算./行列の要素ごとに除算C = A ./ B
行列積*行列の積(内積)C = A * B
行列の左除算\行列の左除算(線形方程式 A * X = B の解を求める)X = A \ B
行列の右除算/行列の右除算(線形方程式 X * A = B の解を求める)X = B / A
転置行列の転置(共役転置)B = A’
転置 (非共役).’非共役転置B = A.’
累乗^行列の累乗C = A^3
要素ごとの累乗.^要素ごとの累乗C = A.^2

4. 条件を満たす配列要素の検索

4.1 find関数

 find 関数を使うと、配列の中で条件を満たす要素のインデックスを取得できます。

D = [10 3 7 15 12];
disp(D)

idx = find(D > 8);
disp('8以上のインデックス')
disp(idx)

図4.find関数の使用例

4.2 論理インデックス

また、MATLABでは論理配列 (logical array) を利用して、条件を満たす要素だけを抽出できます。

D = [10 3 7 15 12]; % 配列Dを定義 (データのリスト)
disp(D)

mask = (D > 8);     % 配列Dの各要素が8より大きいかを論理値(true/false)で判定し、マスクを作成
disp(mask)

E = D(mask);        % マスクがtrueの要素のみを抽出して配列Eに格納
disp(E)

図5.論理インデックスの使用例

5. 多次元配列

5.1 基本的な考え方

MATLABの配列は、多次元に拡張することが可能です。2次元の行列だけでなく、3次元・4次元といった高次元配列を扱えます。多次元配列では、インデックスが (row, col, page, …) のように増えていきます。

% 3次元配列(2×2×2)
F = zeros(2,2,2);
disp(F)

% 要素の代入 (row=1,col=2,page=1) に値8を代入
F(1,2,1) = 8;
disp('要素の変更後:')
disp(F)

図6.多次元配列の例

5.2 size と ndims

  • size(F) : 配列Fの各次元のサイズを取得
  • ndims(F) : 配列Fが何次元かを返す
% 3次元配列(2×2×2)
F = zeros(3,4,2);
disp('配列F:')
disp(F)

s = size(F);  
disp('配列Fのサイズ:')
disp(s)

d = ndims(F);  
disp('配列Fの次元:')
disp(d)

図7.size と ndimsの使用例

まとめ

本記事では行列演算をテーマに、以下のポイントを解説しました。

  1. 行や列の削除 : A(行,:)=[], A(:,列)=[]
  2. 配列の形状変更 : reshape や 転置(A’)
  3. 配列と行列の演算 : 行列演算(*)と要素演算(.*)の違い
  4. 条件を満たす要素の検索 : find, 論理インデックス
  5. 多次元配列 : size, ndimsで次元やサイズを把握

これらを習得すると、MATLABで柔軟かつ効率的にデータを扱えるようになります。

さらなる学習リソース

  • MathWorks公式ドキュメント(日本語)
    MathWorks公式サイト
  • MATLAB Answers (Q&Aフォーラム)
    より高度な応用例やトラブルシューティングを検索できます。
  • YouTube MathWorks公式チャンネル
    動画によるチュートリアルが多く、視覚的な学習が可能。

キーワード再掲:MATLAB, 行列演算, 配列, 行の削除, 列の削除, reshape, 要素ごとの演算, find, 論理インデックス, 多次元配列