# Sparse Matrices

- [Introduction](introduction.md)

- [Creation of Sparse Matrices](creation.md)

  - [Construction of Initialized Sparse Matrices](creation.md#construction-of-initialized-sparse-matrices)

    - [`SparseMatrix(R, m, n, Q): Rng, RngIntElt, RngIntElt, [ <RngIntElt, RngIntElt, RngElt> ] → MtrxSprs`](creation.md#function-sparsematrix-rng-rngintelt-rngintelt-rngintelt-rngintelt-rngelt)

    - [`SparseMatrix(m, n, Q): RngIntElt, RngIntElt, [ <RngIntElt, RngIntElt, RngElt> ] → MtrxSprs`](creation.md#function-sparsematrix-rngintelt-rngintelt-rngintelt-rngintelt-rngelt)

    - [`SparseMatrix(R, m, n): Rng, RngIntElt, RngIntElt → MtrxSprs`](creation.md#function-sparsematrix-rng-rngintelt-rngintelt)

    - [`SparseMatrix(m, n): RngIntElt, RngIntElt → MtrxSprs`](creation.md#function-sparsematrix-rngintelt-rngintelt)

  - [Construction of Trivial Sparse Matrices](creation.md#construction-of-trivial-sparse-matrices)

    - [`SparseMatrix(R): Rng → MtrxSprs`](creation.md#function-sparsematrix-rng)

    - [`SparseMatrix() → MtrxSprs`](creation.md#function-sparsematrix)

    - [`Example: Create`](creation.md#example-ex-a5eec8)

  - [Construction of Structured Matrices](creation.md#construction-of-structured-matrices)

    - [`IdentitySparseMatrix(R, n): Rng, RngElt → MtrxSprs`](creation.md#function-identitysparsematrix-rng-rngelt)

    - [`ScalarSparseMatrix(n, s): RngIntElt, RngElt → MtrxSprs`](creation.md#function-scalarsparsematrix-rngintelt-rngelt)

    - [`ScalarSparseMatrix(R, n, s): Rng, RngIntElt, RngElt → MtrxSprs`](creation.md#function-scalarsparsematrix-rng-rngintelt-rngelt)

    - [`DiagonalSparseMatrix(R, n, Q): Rng, RngIntElt, [ RngElt ] → MtrxSprs`](creation.md#function-diagonalsparsematrix-rng-rngintelt-rngelt)

    - [`DiagonalSparseMatrix(R, Q): Rng, [ RngElt ] → MtrxSprs`](creation.md#function-diagonalsparsematrix-rng-rngelt)

    - [`DiagonalSparseMatrix(Q): [ RngElt ] → MtrxSprs`](creation.md#function-diagonalsparsematrix-rngelt)

    - [`SparseMonomialMatrix(g): GrpPermElt → MtrxSprs`](creation.md#function-sparsemonomialmatrix-grppermelt)

  - [Parents of Sparse Matrices](creation.md#parents-of-sparse-matrices)

    - [`SparseMatrixStructure(R): [ Rng ] → MtrxSprsStr`](creation.md#function-sparsematrixstructure-rng)

- [Accessing Sparse Matrices](access.md)

  - [Elementary Properties](access.md#elementary-properties)

    - [`BaseRing(A): MtrxSprs → Rng`](access.md#function-basering-mtrxsprs)

    - [`CoefficientRing(A): MtrxSprs → Rng`](access.md#function-coefficientring-mtrxsprs)

    - [`NumberOfRows(A): MtrxSprs → RngIntElt`](access.md#function-numberofrows-mtrxsprs)

    - [`Nrows(A): MtrxSprs → RngIntElt`](access.md#function-nrows-mtrxsprs)

    - [`NumberOfColumns(A): MtrxSprs → RngIntElt`](access.md#function-numberofcolumns-mtrxsprs)

    - [`Ncols(A): MtrxSprs → RngIntElt`](access.md#function-ncols-mtrxsprs)

    - [`ElementToSequence(A): MtrxSprs → [ <RngIntElt, RngIntElt, RngElt> ]`](access.md#function-elementtosequence-mtrxsprs)

    - [`Eltseq(A): MtrxSprs → [ <RngIntElt, RngIntElt, RngElt> ]`](access.md#function-eltseq-mtrxsprs)

    - [`NumberOfNonZeroEntries(A): MtrxSprs → RngIntElt`](access.md#function-numberofnonzeroentries-mtrxsprs)

    - [`NNZEntries(A): MtrxSprs → RngIntElt`](access.md#function-nnzentries-mtrxsprs)

    - [`Density(A): MtrxSprs → FldRe`](access.md#function-density-mtrxsprs)

    - [`Support(A, i): MtrxSprs, RngIntElt → [RngIntElt]`](access.md#function-support-mtrxsprs-rngintelt)

    - [`Support(A): MtrxSprs → [ <RngIntElt, RngIntElt, RngElt> ]`](access.md#function-support-mtrxsprs)

  - [Weights](access.md#weights)

    - [`RowWeight(A, i): MtrxSprs, RngIntElt → RngIntElt`](access.md#function-rowweight-mtrxsprs-rngintelt)

    - [`RowWeights(A): MtrxSprs → [RngIntElt]`](access.md#function-rowweights-mtrxsprs)

    - [`ColumnWeight(A, j): MtrxSprs, RngIntElt → RngIntElt`](access.md#function-columnweight-mtrxsprs-rngintelt)

    - [`ColumnWeights(A): MtrxSprs → [RngIntElt]`](access.md#function-columnweights-mtrxsprs)

- [Accessing or Modifying Entries](entries.md)

  - [`A[i]: MtrxSprs, RngIntElt → ModTupRngElt`](entries.md#indexed-indexed-a-mtrxsprs-rngintelt-modtuprngelt)

  - [`A[i, j]: MtrxSprs, RngIntElt, RngIntElt → RngElt`](entries.md#indexed-indexed-a-mtrxsprs-rngintelt-rngintelt-rngelt)

  - [`A[i, j] := x: MtrxSprs, RngIntElt, RngIntElt, RngElt`](entries.md#literal-literal-a-i-j-x-mtrxsprs-rngintelt-rngintelt-rngelt)

  - [`SetEntry(~A, i, j, x): MtrxSprs, RngIntElt, RngIntElt, RngElt`](entries.md#function-smat-setentry)

  - [`Example: Indexing`](entries.md#example-ex-167588)

  - [Extracting and Inserting Blocks](entries.md#extracting-and-inserting-blocks)

    - [`Submatrix(A, i, j, p, q): MtrxSprs, RngIntElt, RngIntElt, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-submatrix-mtrxsprs-rngintelt-rngintelt-rngintelt-rngintelt)

    - [`ExtractBlock(A, i, j, p, q): MtrxSprs, RngIntElt, RngIntElt, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-extractblock-mtrxsprs-rngintelt-rngintelt-rngintelt-rngintelt)

    - [`SubmatrixRange(A, i, j, r, s): MtrxSprs, RngIntElt, RngIntElt, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-submatrixrange-mtrxsprs-rngintelt-rngintelt-rngintelt-rngintelt)

    - [`ExtractBlockRange(A, i, j, r, s): MtrxSprs, RngIntElt, RngIntElt, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-extractblockrange-mtrxsprs-rngintelt-rngintelt-rngintelt-rngintelt)

    - [`Submatrix(A, I, J): MtrxSprs, [RngIntElt], [RngIntElt] → MtrxSprs`](entries.md#function-submatrix-mtrxsprs-rngintelt-rngintelt)

    - [`InsertBlock(A, B, i, j): MtrxSprs, MtrxSprs, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-insertblock-mtrxsprs-mtrxsprs-rngintelt-rngintelt)

    - [`InsertBlock(~A, B, i, j): MtrxSprs, MtrxSprs, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-insertblock-mtrxsprs-mtrxsprs-rngintelt-rngintelt-ref)

    - [`RowSubmatrix(A, i, k): MtrxSprs, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-rowsubmatrix-mtrxsprs-rngintelt-rngintelt)

    - [`RowSubmatrix(A, i): MtrxSprs, RngIntElt → MtrxSprs`](entries.md#function-rowsubmatrix-mtrxsprs-rngintelt)

    - [`RowSubmatrixRange(A, i, j): MtrxSprs, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-rowsubmatrixrange-mtrxsprs-rngintelt-rngintelt)

    - [`ColumnSubmatrix(A, i, k): MtrxSprs, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-columnsubmatrix-mtrxsprs-rngintelt-rngintelt)

    - [`ColumnSubmatrix(A, i): MtrxSprs, RngIntElt → MtrxSprs`](entries.md#function-columnsubmatrix-mtrxsprs-rngintelt)

    - [`ColumnSubmatrixRange(A, i, j): MtrxSprs, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-columnsubmatrixrange-mtrxsprs-rngintelt-rngintelt)

  - [Row and Column Operations](entries.md#row-and-column-operations)

    - [`SwapRows(A, i, j): MtrxSprs, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-swaprows-mtrxsprs-rngintelt-rngintelt)

    - [`SwapRows(~A, i, j): MtrxSprs, RngIntElt, RngIntElt`](entries.md#function-swaprows-mtrxsprs-rngintelt-rngintelt-ref)

    - [`SwapColumns(A, i, j): MtrxSprs, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-swapcolumns-mtrxsprs-rngintelt-rngintelt)

    - [`SwapColumns(~A, i, j): MtrxSprs, RngIntElt, RngIntElt`](entries.md#function-swapcolumns-mtrxsprs-rngintelt-rngintelt-ref)

    - [`ReverseRows(A): MtrxSprs → MtrxSprs`](entries.md#function-reverserows-mtrxsprs)

    - [`ReverseRows(~A): MtrxSprs`](entries.md#function-reverserows-mtrxsprs-ref)

    - [`ReverseColumns(A): MtrxSprs → MtrxSprs`](entries.md#function-reversecolumns-mtrxsprs)

    - [`ReverseColumns(~A): MtrxSprs`](entries.md#function-reversecolumns-mtrxsprs-ref)

    - [`AddRow(A, c, i, j): MtrxSprs, RngElt, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-addrow-mtrxsprs-rngelt-rngintelt-rngintelt)

    - [`AddRow(~A, c, i, j): MtrxSprs, RngElt, RngIntElt, RngIntElt`](entries.md#function-addrow-mtrxsprs-rngelt-rngintelt-rngintelt-ref)

    - [`AddColumn(A, c, i, j): MtrxSprs, RngElt, RngIntElt, RngIntElt → MtrxSprs`](entries.md#function-addcolumn-mtrxsprs-rngelt-rngintelt-rngintelt)

    - [`AddColumn(~A, c, i, j): MtrxSprs, RngElt, RngIntElt, RngIntElt`](entries.md#function-addcolumn-mtrxsprs-rngelt-rngintelt-rngintelt-ref)

    - [`MultiplyRow(A, c, i): MtrxSprs, RngElt, RngIntElt → MtrxSprs`](entries.md#function-multiplyrow-mtrxsprs-rngelt-rngintelt)

    - [`MultiplyRow(~A, c, i): MtrxSprs, RngElt, RngIntElt`](entries.md#function-multiplyrow-mtrxsprs-rngelt-rngintelt-ref)

    - [`MultiplyColumn(A, c, i): MtrxSprs, RngElt, RngIntElt → MtrxSprs`](entries.md#function-multiplycolumn-mtrxsprs-rngelt-rngintelt)

    - [`MultiplyColumn(~A, c, i): MtrxSprs, RngElt, RngIntElt`](entries.md#function-multiplycolumn-mtrxsprs-rngelt-rngintelt-ref)

    - [`RemoveRow(A, i): MtrxSprs, RngIntElt → MtrxSprs`](entries.md#function-removerow-mtrxsprs-rngintelt)

    - [`RemoveRow(~A, i): MtrxSprs, RngIntElt`](entries.md#function-removerow-mtrxsprs-rngintelt-ref)

    - [`RemoveColumn(A, j): MtrxSprs, RngIntElt → MtrxSprs`](entries.md#function-removecolumn-mtrxsprs-rngintelt)

    - [`RemoveColumn(~A, j): MtrxSprs, RngIntElt`](entries.md#function-removecolumn-mtrxsprs-rngintelt-ref)

    - [`RemoveRowColumn(A, i, j): MtrxSprs, RngIntElt → MtrxSprs`](entries.md#function-removerowcolumn-mtrxsprs-rngintelt)

    - [`RemoveRowColumn(~A, i, j): MtrxSprs, RngIntElt`](entries.md#function-removerowcolumn-mtrxsprs-rngintelt-ref)

    - [`RemoveZeroRows(A): MtrxSprs → MtrxSprs`](entries.md#function-removezerorows-mtrxsprs)

    - [`RemoveZeroRows(~A): MtrxSprs`](entries.md#function-removezerorows-mtrxsprs-ref)

- [Building Block Matrices](join.md)

  - [`HorizontalJoin(A, B): MtrxSprs, MtrxSprs → MtrxSprs`](join.md#function-horizontaljoin-mtrxsprs-mtrxsprs)

  - [`VerticalJoin(A, B): MtrxSprs, MtrxSprs → MtrxSprs`](join.md#function-verticaljoin-mtrxsprs-mtrxsprs)

  - [`DiagonalJoin(A, B): MtrxSprs, MtrxSprs → MtrxSprs`](join.md#function-diagonaljoin-mtrxsprs-mtrxsprs)

- [Conversion to and from Dense Matrices](conversion.md)

  - [`Matrix(A): MtrxSprs → Mtrx`](conversion.md#function-smat-matrix)

  - [`SparseMatrix(A): Mtrx → MtrxSprs`](conversion.md#function-sparsematrix-mtrx)

- [Changing Ring](change-ring.md)

  - [`ChangeRing(A, R): MtrxSprs, Rng → MtrxSprs`](change-ring.md#function-changering-mtrxsprs-rng)

  - [`SparseMatrix(R, A): Rng, MtrxSprs → MtrxSprs`](change-ring.md#function-sparsematrix-rng-mtrxsprs)

- [Predicates](predicates.md)

  - [`A eq B: MtrxSprs, MtrxSprs → BoolElt`](predicates.md#operation-op-eq-mtrxsprs-mtrxsprs)

  - [`IsZero(A): MtrxSprs → BoolElt`](predicates.md#function-iszero-mtrxsprs)

  - [`IsOne(A): MtrxSprs → BoolElt`](predicates.md#function-isone-mtrxsprs)

  - [`IsMinusOne(A): MtrxSprs → BoolElt`](predicates.md#function-isminusone-mtrxsprs)

  - [`IsScalar(A): MtrxSprs → BoolElt`](predicates.md#function-isscalar-mtrxsprs)

  - [`IsDiagonal(A): MtrxSprs → BoolElt`](predicates.md#function-isdiagonal-mtrxsprs)

  - [`IsSymmetric(A): MtrxSprs → BoolElt`](predicates.md#function-issymmetric-mtrxsprs)

  - [`IsUpperTriangular(A): MtrxSprs → BoolElt`](predicates.md#function-isuppertriangular-mtrxsprs)

  - [`IsLowerTriangular(A): MtrxSprs → BoolElt`](predicates.md#function-islowertriangular-mtrxsprs)

- [Elementary Arithmetic](arithmetic.md)

  - [`A + B: MtrxSprs, MtrxSprs → MtrxSprs`](arithmetic.md#operation-op-plus-mtrxsprs-mtrxsprs)

  - [`A - B: MtrxSprs, MtrxSprs → MtrxSprs`](arithmetic.md#operation-op-minus-mtrxsprs-mtrxsprs)

  - [`A * B: MtrxSprs, MtrxSprs → MtrxSprs`](arithmetic.md#operation-op-times-mtrxsprs-mtrxsprs)

  - [`x * A: RngElt, MtrxSprs → MtrxSprs`](arithmetic.md#operation-op-times-rngelt-mtrxsprs)

  - [`A * x: MtrxSprs, RngElt → MtrxSprs`](arithmetic.md#operation-op-times-mtrxsprs-rngelt)

  - [`-A: MtrxSprs → MtrxSprs`](arithmetic.md#operation-operation-mtrxsprs-mtrxsprs)

  - [`A ^-1: MtrxSprs, RngIntElt → MtrxSprs`](arithmetic.md#operation-operation-1-mtrxsprs-rngintelt-mtrxsprs)

  - [`A ^ n: MtrxSprs, RngIntElt → MtrxSprs`](arithmetic.md#operation-op-pow-mtrxsprs-rngintelt)

  - [`Transpose(A): MtrxSprs → MtrxSprs`](arithmetic.md#function-transpose-mtrxsprs)

- [Multiplying Vectors or Matrices by Sparse Matrices](multiply.md)

  - [`v * A: ModTupRng, MtrxSprs → ModTupRng`](multiply.md#operation-op-times-modtuprng-mtrxsprs)

  - [`V * A: Mtrx, MtrxSprs → Mtrx`](multiply.md#operation-op-times-mtrx-mtrxsprs)

  - [`MultiplyByTranspose(v, A): ModTupRng, MtrxSprs → ModTupRng`](multiply.md#function-multiplybytranspose-modtuprng-mtrxsprs)

  - [`MultiplyByTranspose(V, A): Mtrx, MtrxSprs → Mtrx`](multiply.md#function-multiplybytranspose-mtrx-mtrxsprs)

- [Non-trivial Properties](non-trivial.md)

  - [Nullspace and Rowspace](non-trivial.md#nullspace-and-rowspace)

    - [`Nullspace(A): MtrxSprs → ModTupRng`](non-trivial.md#function-nullspace-mtrxsprs)

    - [`Kernel(A): MtrxSprs → ModTupRng, Map`](non-trivial.md#function-kernel-mtrxsprs)

    - [`NullspaceMatrix(A): MtrxSprs → Mtrx`](non-trivial.md#function-nullspacematrix-mtrxsprs)

    - [`KernelMatrix(A): MtrxSprs → Mtrx`](non-trivial.md#function-kernelmatrix-mtrxsprs)

    - [`NullspaceOfTranspose(A): MtrxSprs → ModTupRng`](non-trivial.md#function-nullspaceoftranspose-mtrxsprs)

    - [`Rowspace(A): MtrxSprs → ModTupRng`](non-trivial.md#function-rowspace-mtrxsprs)

  - [Rank](non-trivial.md#rank)

    - [`Rank(A): MtrxSprs → RngIntElt`](non-trivial.md#function-rank-mtrxsprs)

- [Determinant and Other Properties](determinant.md)

  - [`Determinant(A: parameters): MtrxSprs → RngElt`](determinant.md#function-determinant-mtrxsprs)

- [Minimal and Characteristic Polynomials and Eigenvalues](min-char-poly.md)

  - [`MinimalPolynomial(A: parameters): MtrxSprs → RngUPolElt`](min-char-poly.md#function-minimalpolynomial-mtrxsprs)

  - [`CharacteristicPolynomial(A: parameters): MtrxSprs → RngUPolElt`](min-char-poly.md#function-characteristicpolynomial-mtrxsprs)

  - [`MinimalAndCharacteristicPolynomials(A: parameters): MtrxSprs → RngUPolElt, RngUPolElt`](min-char-poly.md#function-minimalandcharacteristicpolynomials-mtrxsprs)

  - [`MCPolynomials(A): MtrxSprs → RngUPolElt, RngUPolElt`](min-char-poly.md#function-mcpolynomials-mtrxsprs)

  - [`FactoredMinimalPolynomial(A: parameters): MtrxSprs → [ <RngUPolElt, RngIntElt>]`](min-char-poly.md#function-factoredminimalpolynomial-mtrxsprs)

  - [`FactoredCharacteristicPolynomial(A: parameters): MtrxSprs → [ <RngUPolElt, RngIntElt>]`](min-char-poly.md#function-factoredcharacteristicpolynomial-mtrxsprs)

  - [`FactoredMinimalAndCharacteristicPolynomials(A: parameters): MtrxSprs → [<RngUPolElt, RngIntElt>], [<RngUPolElt, RngIntElt>]`](min-char-poly.md#function-factoredminimalandcharacteristicpolynomials-mtrxsprs)

  - [`FactoredMCPolynomials(A: parameters): MtrxSprs → [<RngUPolElt, RngIntElt>], [<RngUPolElt, RngIntElt>]`](min-char-poly.md#function-factoredmcpolynomials-mtrxsprs)

  - [`Eigenvalues(A): MtrxSprs → { <FldElt, RngIntElt> }`](min-char-poly.md#function-eigenvalues-mtrxsprs)

  - [`Eigenspace(A, e): AlgMatElt, FldElt → ModTup`](min-char-poly.md#function-eigenspace-algmatelt-fldelt)

  - [Elementary Divisors (Smith Form)](min-char-poly.md#elementary-divisors-smith-form)

    - [`ElementaryDivisors(A): MtrxSprs → [RngElt]`](min-char-poly.md#function-elementarydivisors-mtrxsprs)

  - [Verbosity](min-char-poly.md#verbosity)

    - [`SetVerbose("SparseMatrix", v): MonStgElt, RngIntElt`](min-char-poly.md#function-setverbose-monstgelt-rngintelt)

- [Linear Systems (Structured Gaussian Elimination)](solution.md)

  - [`ModularSolution(A, M): MtrxSprs, RngIntElt → ModTupRng`](solution.md#function-smat-modularsolution)

  - [`ModularSolution(A, L): MtrxSprs, RngIntEltFact → ModTupRng`](solution.md#function-modularsolution-mtrxsprs-rnginteltfact)

  - [`Example: Discrete Log`](solution.md#example-ex-a75220)
