Main Content

mtimes, *

説明

C = A*BAB の行列積です。A が m 行 p 列の行列で B が p 行 n 列の行列の場合、C は次で定義される m 行 n 列の行列になります。

C(i,j)=k=1pA(i,k)B(k,j).

この定義は、C(i,j)Ai 行目と Bj 列目の内積であることを示します。この定義を MATLAB® コロン演算子を使用して以下のように記述できます。

C(i,j) = A(i,:)*B(:,j)
非スカラーの AB に対しては、A の列数は B の行数と等しくなる必要があります。非スカラー入力の場合、行列乗算は必ずしも可換では "ありません"。つまり、A*B は一般的に B*A と等価ではありません。少なくとも 1 つの入力がスカラーの場合、A*BA.*B と等価であり、可換です。

C = mtimes(A,B)A*B の代替方法として実行できますが、まれにしか使われません。これにより、クラスの演算子のオーバーロードが可能です。

すべて折りたたむ

1 行 4 列の行ベクトル A と 4 行 1 列の列ベクトル B を作成します。

A = [1 1 0 0];
B = [1; 2; 3; 4];

AB の乗算を行います。

C = A*B
C = 3

結果は 1 行 1 列のスカラーであり、ベクトル A および B"ドット積" または "内積" とも呼ばれます。ドット積 AB は、代わりに構文 dot(A,B) を使用して計算することもできます。

BA の乗算を行います。

C = B*A
C = 4×4

     1     1     0     0
     2     2     0     0
     3     3     0     0
     4     4     0     0

結果は 4 行 4 列の行列であり、ベクトル AB"外積" とも呼ばれます。2 つのベクトルの外積 AB は、行列を返します。

2 つの配列 A および B を作成します。

A = [1 3 5; 2 4 7];
B = [-5 8 11; 3 9 21; 4 0 8];

AB の積を計算します。

C = A*B
C = 2×3

    24    35   114
    30    52   162

A の 2 番目の行と B の 3 番目の列の内積を計算します。

A(2,:)*B(:,3)
ans = 162

この解は、C(2,3) と同じです。

入力引数

すべて折りたたむ

オペランド。スカラー、ベクトルまたは行列として指定します。

  • 少なくとも 1 つの入力がスカラーの場合、A*BA.*B と等価です。この場合、非スカラー配列は任意のサイズにすることができます。

  • 非スカラー入力の場合、A および B は 2 次元配列でなければなりません。その際、A の列数は B の行数と等しくなければなりません。

  • A または B のいずれかが整数クラス (int16uint8、…) の場合、もう一方の入力はスカラーでなければなりません。整数データ型のオペランドは、複素数にできません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | duration | calendarDuration
複素数のサポート: あり

出力引数

すべて折りたたむ

積。スカラー、ベクトルまたは行列として返されます。配列 C の行数は入力 A と同じであり、列数は入力 B と同じです。たとえば、A が m 行 0 列の空行列で B が 0 行 n 列の空行列の場合、A*B は要素がゼロである m 行 n 列の行列になります。

ヒント

  • A*B*C のような連鎖行列積の場合、かっこを使用して演算順序を指定することにより、実行時間を向上できることがあります。3 つの行列の乗算 A*B*C を考えます。ここで、A は 500 行 2 列、B は 2 行 500 列、C は 500 行 2 列です。

    • かっこがない場合演算の順序は左から右であるため、まず A*B が計算され、500 行 500 列の行列になります。次に、この行列に C が乗算され、500 行 2 列の結果が得られます。

    • 代わりに A*(B*C) を指定した場合、まず B*C の乗算が実行され、2 行 2 列の行列が得られます。次に、この小さい行列が A と乗算され、同じ 500 行 2 列の結果が得られますが、演算が少なくなり、中間のメモリ使用量も少なくなります。

参照

[1] “BLAS (Basic Linear Algebra Subprograms).” Accessed July 18, 2022. https://netlib.org/blas/.

[2] Davis, Timothy A. “Algorithm 1000: SuiteSparse:GraphBLAS: Graph Algorithms in the Language of Sparse Linear Algebra.” ACM Transactions on Mathematical Software 45, no. 4 (December 31, 2019): 1–25. https://doi.org/10.1145/3322125.

拡張機能

HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。

バージョン履歴

R2006a より前に導入

すべて展開する