mtimes, *
行列乗算
説明
は C
= A
*B
A
と B
の行列積です。A
が m 行 p 列の行列で B
が p 行 n 列の行列の場合、C
は次で定義される m 行 n 列の行列になります。
この定義は、C(i,j)
が A
の i
行目と B
の j
列目の内積であることを示します。この定義を MATLAB® コロン演算子を使用して以下のように記述できます。
C(i,j) = A(i,:)*B(:,j)
A
と B
に対しては、A
の列数は B
の行数と等しくなる必要があります。非スカラー入力の場合、行列乗算は必ずしも可換では "ありません"。つまり、A*B
は一般的に B*A
と等価ではありません。少なくとも 1 つの入力がスカラーの場合、A*B
は A.*B
と等価であり、可換です。例
入力引数
出力引数
ヒント
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.