mtimes, *
行列乗算
説明
は C = A*BA と 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.