# *
矩阵乘法
# 语法
C = A*B
C = *(A,B)
# 说明
C = A*B 是 A 和 B 的矩阵乘积。如果 A 是 m×p 矩阵,B 是 p×n 矩阵,则 C 是通过以下公式定义的 m×n 矩阵:
该定义说明 C[i,j] 是 A 第 i 行与 B 第 j 列的内积。您可以使用 Syslab 中冒号运算符来书写该定义,如下所示
C[i,j] = A[i,:]*B[:,j]
对于非标量 A 和 B,A 的列数必须等于 B 的行数。对于非标量输入,矩阵乘法不一定能互换位置。也就是说,A * B 不一定等于 B * A。至少一方输入为标量时,A * B 等于 A.*B,这时可以互换位置。示例
# 示例
将两个一维数组相乘
创建一个 1×4 矩阵 A 和一个 4×1 向量 B。
A = [1 1 0 0]
B = [1; 2; 3; 4]
A 乘以 B。
C = A*B
C = 1-element Vector{Int64}:
3
结果是 1×1 标量,也称为向量 A 和 B 的点积或内积。或者,可以使用 dot(A,B) 语法来计算
B 乘以 A。
C = B*A
C = 4×4 Matrix{Int64}:
1 1 0 0
2 2 0 0
3 3 0 0
4 4 0 0
结果是 4×4 矩阵,也称为向量 A 和 B 的外积。两个向量的外积
将两个数组相乘
创建两个数组 A 和 B。
A = [1 3 5; 2 4 7]
B = [-5 8 11; 3 9 21; 4 0 8];
计算 A 和 B 的乘积。
C = A*B
C = 2×3 Matrix{Int64}:
24 35 114
30 52 162
计算 A 第二行和 B 第三列的内积。
A[2,:]'*B[:,3]
ans = 162
结果与 C[2,3] 一样。
# 输入参数
A, B - 操作数标量 | 向量 | 矩阵
操作数,指定为标量、向量或矩阵。
- 如果至少一个输入为标量,则 A*B 等效于 A.*B。在这种情况下,非标量数组可以为任何大小;
- 对于非标量输入,A 和 B 必须为二维数组,其中 A 中的列数必须等于 B 中的行数。
数据类型: Int | Float | Bool | Char | String | Vector | Struct | DateTime | Tuple
复数支持: 是
# 输出参数
C - 乘积标量 | 向量 | 矩阵
乘积,以标量、向量或矩阵形式返回。数组 C 的行数与输入 A 的行数相同,列数与输入 B 的列数相同。例如,如果 A 是 m×0 空矩阵,B 是 0×n 空矩阵,那么 A*B 是 m×n 的全零矩阵。
# 提示
使用链式矩阵乘法,例如 A * B * C,您可能可以使用圆括号来指定运算顺序,从而缩短执行时间。以三个矩阵相乘 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 的结果,但运算量更少,中间内存使用量更少。