Differences between revisions 1 and 16 (spanning 15 versions)
Revision 1 as of 2021-09-14 15:42:01
Size: 1239
Comment:
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 3: Line 3:
== Introduction == '''Matrix multiplication''' is a fundamental operation corresponding to [[LinearAlgebra/LinearMapping|homomorphisms]].
Line 5: Line 5:
Matrices are multiplied non-commutatively. See also [[Calculus/VectorOperations|vector operations]].
Line 7: Line 7:
The ''m'' rows of matrix A are multiplied by the ''p'' rows of matrix B. Therefore, note that A must be as tall as B is wide. <<TableOfContents>>
Line 9: Line 9:
{{{
┌ ┐┌ ┐ ┌ ┐
│ 0 0││ 0 0 0│ │ 0 0 0│
│ 0 0││ 0 0 0│ = │ 0 0 0│
│ 0 0│└ ┘ │ 0 0 0│
└ ┘ └ ┘

  A x B = C

 mxn x nxp = mxp
}}}

A cell in a matrix is expressed as C,,ij,, where `i` is a row index and `j` is a column index.
----
Line 25: Line 13:
== Multiplication == == Dimensions ==
Line 27: Line 15:
In a multiplication of matrices A and B, cell C,,ij,, is solved as (row `i` of A)(column `j` 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 29: Line 17:
Consider the following: This can be visualized as:
Line 32: Line 20:
┌ ┐┌ ┐ ┌ ┐
│ 1 2││ 1 0│ │ 1 2│
│ 3 4││ 0 1│ = │ 3 4│
└ ┘└ ┘ └ ┘
                              ┌ ┐
                              │ 1 . │
                              │ 2 . │
                              │ 3 . │
                              │ 4 . │
       ┌ ┐ <=> └ ┘
       │ B │ ┌ ┐ ┌ ┐
       └ ┘ │ 1 2 3 4 │ │ 30 . │
┌ ┐ ┌ ┐ │ . . . . │ │ . . │
│ A │ │ C │ │ . . . . │ │ . . │
└ ┘ └ ┘ └ ┘ └ ┘
}}}
Line 37: Line 33:
cell (1,1) = (row 1 of A)(column 1 of B)
           = [1 2][1 0]
           = (1 * 1) + (2 * 0)
           = 1
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 42: Line 35:
cell (1,2) = (row 1 of A)(column 2 of B)
           = [1 2][0 1]
           = (1 * 0) + (2 * 1)
           = 2
Violations of these dimensional requirements mean the product DNE.
Line 47: Line 37:
cell (2,1) = [3 4][1 0]
           = 3
----
Line 50: Line 39:
cell (2,2) = [3 4][0 1]
           = 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.

----



== Cell-wise Computation ==

A cell in a matrix is expressed as '''''A''',,ij,,'' where ''i'' is a row index and ''j'' is a column index. Indexing starts at 1.

For '''''C''' = '''AB''''': '''''C''',,ij,,'' can be computed as the [[Calculus/VectorOperations#Dot_Product|dot product]] of row '''''A''',,i,,'' and column '''''B''',,j,,''.

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 '''''C''',,j,,'' is a linear combination of all columns in '''''A''''' taken according to the column '''''B''',,j,,''.

Referencing the complete solution above and recall that '''''B''',,1,, = [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 '''''C''',,i,,'' is a linear combination of all rows in '''''B''''' taken according to the row '''''A''',,i,,''.

Referencing the complete solution above and recall that '''''A''',,1,, = [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 1
}}}

Much 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 1
}}}

The 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 8
}}}

But if a specific block of the product is of interest, it can be solved like '''''C'''^1^ = '''A'''^1^'''B'''^1^ + '''A'''^2^'''B'''^3^''.

{{{
julia> A1 * B1 + A2 * B3
2×2 Matrix{Int64}:
 2 4
 6 8

Matrix Multiplication

Matrix multiplication is a fundamental operation corresponding to homomorphisms.

See also vector operations.


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  1

Much 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  1

The 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  8

But 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


CategoryRicottone

LinearAlgebra/MatrixMultiplication (last edited 2026-01-21 16:22:47 by DominicRicottone)