|
Size: 3263
Comment: Reorg
|
← Revision 16 as of 2026-01-21 16:22:47 ⇥
Size: 4728
Comment: Link
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 2: | Line 2: |
'''Matrix multiplication''' is a fundamental operation corresponding to [[LinearAlgebra/LinearMapping|homomorphisms]]. See also [[Calculus/VectorOperations|vector operations]]. |
|
| Line 9: | Line 13: |
| == Properties == | == Dimensions == |
| Line 11: | Line 15: |
| Two matrices are multiplied as linear combinations; the '''rows''' of '''''A''''' and the '''columns''' of '''''B'''''. | To multiply two matrices (i.e., '''''AB''' = '''C'''''), they must have a common dimension. '''''A''''' must be as wide as '''''B''''' is tall, and the product will be as wide as '''''B''''' and as tall as '''''A'''''. Alternatively: '''''A''''' has shape ''m x n'' (rows by columns), and '''''B''''' has shape ''n x p'', so the product '''''C''''' will have shape ''m x p''. |
| Line 13: | Line 17: |
| Two matrices can only be multiplied if their shape is compatible; '''''A''''' must be as tall as '''''B''''' is wide. If '''''A''''' has shape ''m'' rows by ''n'' columns, then '''''B''''' must have shape ''p'' rows by ''m'' columns. (The relation between ''n'' and ''p'' does not matter.) Order matters. The multiplication is '''not''' commutative. |
This can be visualized as: |
| Line 18: | Line 20: |
| julia> A = [1 2; 0 0; 0 0] 3×2 Matrix{Int64}: 1 2 0 0 0 0 |
┌ ┐ │ 1 . │ │ 2 . │ │ 3 . │ │ 4 . │ ┌ ┐ <=> └ ┘ │ B │ ┌ ┐ ┌ ┐ └ ┘ │ 1 2 3 4 │ │ 30 . │ ┌ ┐ ┌ ┐ │ . . . . │ │ . . │ │ A │ │ C │ │ . . . . │ │ . . │ └ ┘ └ ┘ └ ┘ └ ┘ }}} |
| Line 24: | Line 33: |
| julia> B = [1 0 0; 2 0 0] 2×3 Matrix{Int64}: 1 0 0 2 0 0 |
Vectors are columns by convention, so a matrix can only be multiplied by a vector on the right (i.e., '''''A'''x = y''). The only workaround is to denote the [[LinearAlgebra/Transposition|transposed]] vector (i.e., ''x^T^'''A'''''). |
| Line 29: | Line 35: |
| julia> A * B 3×3 Matrix{Int64}: 5 0 0 0 0 0 0 0 0 |
Violations of these dimensional requirements mean the product DNE. |
| Line 35: | Line 37: |
| julia> B * A 2×2 Matrix{Int64}: 1 2 2 4 }}} |
---- == Description == The product of two matrices (i.e., '''''AB''' = '''C''''') is a linear combination of the rows of '''''A''''' according to the columns of '''''B''''', or a linear combination of the columns of '''''B''''' according to the rows of '''''A'''''. === Properties === Matrix multiplication is ''not'' commutative. Matrix multiplication is associative: ''('''AB''')'''X''' = '''A'''('''BX''')''. Furthermore, scalar multiplication is associative within matrix multiplication: ''r('''AB''') = (r'''A''')'''B''' = '''A'''(r'''B''')''. Matrix multiplication has distinct left and right distributive properties: '''''A'''('''B'''+'''C''') = '''AB''' + '''AC''''' and ''('''B'''+'''C''')'''A''' = '''BA''' + '''CA''''' respectively. |
| Line 49: | Line 63: |
| For '''''C''' = '''AB''''': '''''C''',,ij,,'' can be computed as the [[LinearAlgebra/VectorMultiplication#Dot_Product|dot product]] of row '''''A''',,i,,'' and column '''''B''',,j,,''. | For '''''C''' = '''AB''''': '''''C''',,ij,,'' can be computed as the [[Calculus/VectorOperations#Dot_Product|dot product]] of row '''''A''',,i,,'' and column '''''B''',,j,,''. |
Matrix Multiplication
Matrix multiplication is a fundamental operation corresponding to homomorphisms.
See also vector operations.
Contents
Dimensions
To multiply two matrices (i.e., AB = C), they must have a common dimension. A must be as wide as B is tall, and the product will be as wide as B and as tall as A. Alternatively: A has shape m x n (rows by columns), and B has shape n x p, so the product C will have shape m x p.
This can be visualized as:
┌ ┐
│ 1 . │
│ 2 . │
│ 3 . │
│ 4 . │
┌ ┐ <=> └ ┘
│ B │ ┌ ┐ ┌ ┐
└ ┘ │ 1 2 3 4 │ │ 30 . │
┌ ┐ ┌ ┐ │ . . . . │ │ . . │
│ A │ │ C │ │ . . . . │ │ . . │
└ ┘ └ ┘ └ ┘ └ ┘Vectors are columns by convention, so a matrix can only be multiplied by a vector on the right (i.e., Ax = y). The only workaround is to denote the transposed vector (i.e., xTA).
Violations of these dimensional requirements mean the product DNE.
Description
The product of two matrices (i.e., AB = C) is a linear combination of the rows of A according to the columns of B, or a linear combination of the columns of B according to the rows of A.
Properties
Matrix multiplication is not commutative.
Matrix multiplication is associative: (AB)X = A(BX). Furthermore, scalar multiplication is associative within matrix multiplication: r(AB) = (rA)B = A(rB).
Matrix multiplication has distinct left and right distributive properties: A(B+C) = AB + AC and (B+C)A = BA + CA respectively.
Cell-wise Computation
A cell in a matrix is expressed as Aij where i is a row index and j is a column index. Indexing starts at 1.
For C = AB: Cij can be computed as the dot product of row Ai and column Bj.
Referencing the complete solution above:
julia> A[1, :]
2-element Vector{Int64}:
1
2
julia> B[:, 1]
2-element Vector{Int64}:
1
2
julia> using LinearAlgebra
julia> dot(A[1, :], B[:, 1])
5
Column-wise Computation
Column Cj is a linear combination of all columns in A taken according to the column Bj.
Referencing the complete solution above and recall that B1 = [1 2]:
C = 1*A + 2*A 1 1 2 C = 1*[1 0 0] + 2*[2 0 0] 1 C = [1 0 0] + [4 0 0] 1 C = [5 0 0] 1
Row-wise Computation
Row Ci is a linear combination of all rows in B taken according to the row Ai.
Referencing the complete solution above and recall that A1 = [1 2]:
C = 1*B + 2*B 1 1 2 C = 1*[1 0 0] + 2*[2 0 0] 1 C = [1 0 0] + [4 0 0] 1 C = [5 0 0] 1
Block-wise Computation
Matrix multiplication can be evaluated in blocks. Suppose A and B are 20x20 matrices; they can be divided each into 10x10 quadrants.
Using these matrices A and B as the building blocks:
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> B = [1 0; 0 1]
2×2 Matrix{Int64}:
1 0
0 1Much larger matrices may be composed of these building blocks.
julia> A_ = [A1 A2; A3 A4]
4×4 Matrix{Int64}:
1 2 1 2
3 4 3 4
1 2 1 2
3 4 3 4
julia> B_ = [B1 B2; B3 B4]
4×4 Matrix{Int64}:
1 0 1 0
0 1 0 1
1 0 1 0
0 1 0 1The entire product could be computed:
julia> A_ * B_
4×4 Matrix{Int64}:
2 4 2 4
6 8 6 8
2 4 2 4
6 8 6 8But if a specific block of the product is of interest, it can be solved like C1 = A1B1 + A2B3.
julia> A1 * B1 + A2 * B3
2×2 Matrix{Int64}:
2 4
6 8