Skip to content

MatrixRank ​

The rank of a matrix: the number of linearly independent rows (equivalently, columns).

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageMatrixRank!
MatrixRank(A)the rank of the matrix A.
SageMathmatrix(A).rank()SymPyMatrix(A).rank()
Typed signatures
TypePackageApplies
(value) -> integeranalyticreplaces compute-enginealways
(value) -> integercombinatoricsreplaces analyticalways
(value) -> integercompute-enginealways

Domain: Linear algebra

Details
  • Written rank⁡A\operatorname{rank} A. Row rank equals column rank, so rank⁡A=rank⁡A⊤\operatorname{rank} A = \operatorname{rank} A^\top.
  • A square matrix is invertible exactly when its rank is its size.
  • Not the array Rank, which counts dimensions.

Examples

Basic #
live ↗
Inrank⁡([[1,0],[0,1]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 0\bigr\rbrack, \bigl\lbrack0, 1\bigr\rbrack\bigr\rbrack)Out22
live ↗
Inrank⁡([[1,2],[2,4]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack2, 4\bigr\rbrack\bigr\rbrack)Out11
live ↗
Inrank⁡([[1,2,3],[4,5,6],[7,8,9]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack4, 5, 6\bigr\rbrack, \bigl\lbrack7, 8, 9\bigr\rbrack\bigr\rbrack)Out22

Non-square matrices too

live ↗
Inrank⁡([[1,2,3],[2,4,6]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack2, 4, 6\bigr\rbrack\bigr\rbrack)Out11
live ↗
Inrank⁡([[0,0],[0,0]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack0, 0\bigr\rbrack, \bigl\lbrack0, 0\bigr\rbrack\bigr\rbrack)Out00

A matrix of pairwise-distinct symbols has full rank -- its determinant, as a polynomial in independent indeterminates, can never be identically zero

live ↗
Inrank⁡([[a,b],[c,d]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, d\bigr\rbrack\bigr\rbrack)Out22

Three rows, rank 3 despite the zeros

live ↗
Inrank⁡([[0,5,2,4,4],[2,5,0,4,0],[5,1,5,4,5]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack0, 5, 2, 4, 4\bigr\rbrack, \bigl\lbrack2, 5, 0, 4, 0\bigr\rbrack, \bigl\lbrack5, 1, 5, 4, 5\bigr\rbrack\bigr\rbrack)Out33
live ↗
Inrank⁡([[a,b,c],[d,m,f],[g,h,k]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack d, m, f\bigr\rbrack, \bigl\lbrack g, h, k\bigr\rbrack\bigr\rbrack)Out33
Scope #

Approximate entries

live ↗
Inrank⁡([[1,2.5],[3.5,4]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 2.5\bigr\rbrack, \bigl\lbrack3.5, 4\bigr\rbrack\bigr\rbrack)Out22

Complex entries: the second row is ii times the first

live ↗
Inrank⁡([[1,i],[i,−1]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, i\bigr\rbrack, \bigl\lbrack i, -1\bigr\rbrack\bigr\rbrack)Out11

Exact numeric entries

live ↗
Inrank⁡([[π,e],[2π,2e]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack π, e\bigr\rbrack, \bigl\lbrack2π, 2e\bigr\rbrack\bigr\rbrack)Out11

The second row is 2\sqrt{2} times the first

live ↗
Inrank⁡([[2,1],[2,2]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack\sqrt{2}, 1\bigr\rbrack, \bigl\lbrack2, \sqrt{2}\bigr\rbrack\bigr\rbrack)Out11

A 3×4 matrix with one dependent row

live ↗
Inrank⁡([[1,2,3,4],[2,4,6,8],[1,0,1,0]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 2, 3, 4\bigr\rbrack, \bigl\lbrack2, 4, 6, 8\bigr\rbrack, \bigl\lbrack1, 0, 1, 0\bigr\rbrack\bigr\rbrack)Out22
live ↗
Inrank⁡(IdentityMatrix(5))\operatorname{rank}(\mathrm{IdentityMatrix}(5))Out55

A 3×33\times3 matrix of pairwise-distinct symbols is full rank — the determinant, as a polynomial in independent indeterminates, can't be identically zero.

live ↗
Inrank⁡([[p,q,r],[s,t,u],[v,w,x]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack p, q, r\bigr\rbrack, \bigl\lbrack s, t, u\bigr\rbrack, \bigl\lbrack v, w, x\bigr\rbrack\bigr\rbrack)Out33

Symbolic rows that are proportional have rank 1

live ↗
Inrank⁡([[a,b],[2a,2b]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack2a, 2b\bigr\rbrack\bigr\rbrack)Out11

The Hilbert matrix is invertible, so full rank

live ↗
Inrank⁡(HilbertMatrix(3))\operatorname{rank}(\mathrm{HilbertMatrix}(3))Out33
live ↗
Inrank⁡(IdentityMatrix(3))\operatorname{rank}(\mathrm{IdentityMatrix}(3))Out33
Applications #

The 4×4 Hilbert matrix is badly conditioned but invertible

live ↗
Inrank⁡(Tabulate((_1⁡,_2⁡)↦1(_1⁡+_2⁡)−1,4,4))\operatorname{rank}(\mathrm{Tabulate}((\operatorname{\_1}, \operatorname{\_2})↦\frac{1}{(\operatorname{\_1}+\operatorname{\_2})-1}, 4, 4))Out44
Properties #

Row rank equals column rank

live ↗
Inrank⁡([[1,2,3],[4,5,6],[7,8,9]])=rank⁡([[1,2,3],[4,5,6],[7,8,9]]T)\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack4, 5, 6\bigr\rbrack, \bigl\lbrack7, 8, 9\bigr\rbrack\bigr\rbrack)=\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack4, 5, 6\bigr\rbrack, \bigl\lbrack7, 8, 9\bigr\rbrack\bigr\rbrack^T)OutTrue\mathrm{True}

Rank–nullity: the rank plus the dimension of the null space is the number of columns

live ↗
Inrank⁡([[1,2,3],[4,5,6],[7,8,9]])+Length(ker⁡([[1,2,3],[4,5,6],[7,8,9]]))\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack4, 5, 6\bigr\rbrack, \bigl\lbrack7, 8, 9\bigr\rbrack\bigr\rbrack)+\mathrm{Length}(\ker\left(\bigl\lbrack\bigl\lbrack1, 2, 3\bigr\rbrack, \bigl\lbrack4, 5, 6\bigr\rbrack, \bigl\lbrack7, 8, 9\bigr\rbrack\bigr\rbrack\right))Out33

An outer product uv⊤u v^\top has rank 1; a lazy Tabulate matrix is read as the matrix it describes

live ↗
Inrank⁡(Tabulate(Multiply,4,4))\operatorname{rank}(\mathrm{Tabulate}(\mathrm{Multiply}, 4, 4))Out11
Possible issues #

A symbolic matrix stays unevaluated (Wolfram answers the generic rank, 2)

live ↗
Inrank⁡([[x,1],[1,x]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack x, 1\bigr\rbrack, \bigl\lbrack1, x\bigr\rbrack\bigr\rbrack)Outrank⁡([[x,1],[1,x]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack x, 1\bigr\rbrack, \bigl\lbrack1, x\bigr\rbrack\bigr\rbrack)

A vector is treated as a 1×n matrix (Wolfram rejects it)

live ↗
Inrank⁡([1,2,3])\operatorname{rank}(\bigl\lbrack1, 2, 3\bigr\rbrack)Out11

A non-square matrix of distinct symbols doesn't qualify for the full-rank rule -- it stays unevaluated

live ↗
Inrank⁡([[a,b,c],[d,g,h]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack d, g, h\bigr\rbrack\bigr\rbrack)Outrank⁡([[a,b,c],[d,g,h]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack d, g, h\bigr\rbrack\bigr\rbrack)

Repeating a symbol across rows doesn't qualify either -- native compute-engine still answers this one directly (rank 1, equal rows)

live ↗
Inrank⁡([[a,b],[a,b]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack a, b\bigr\rbrack\bigr\rbrack)Out11

A zero row lowers the rank: only one independent row

live ↗
Inrank⁡([[1,0],[0,0]])\operatorname{rank}(\bigl\lbrack\bigl\lbrack1, 0\bigr\rbrack, \bigl\lbrack0, 0\bigr\rbrack\bigr\rbrack)Out11
Neat examples #

Every matrix with entries i+ji + j has rank 2, whatever its size

live ↗
Inrank⁡(Tabulate(Add,4,4))\operatorname{rank}(\mathrm{Tabulate}(\mathrm{Add}, 4, 4))Out22
About
Examples28
Checked againstWolfram Language 24 agree3 differSageMath 19 agree2 unevaluatedSymPy 18 agree2 unevaluated
CrosswalkWolfram LanguageSageMathSymPy

Implementation

mappedsagepackages/oracle/src/mappings.ts
mappedsympypackages/oracle/src/mappings.ts