Matrix Spaces¶
You can create any space \(\text{Mat}_{n\times m}(R)\) of either dense or sparse matrices with given number of rows and columns over any commutative or noncommutative ring.
EXAMPLES:
sage: MS = MatrixSpace(QQ,6,6,sparse=True); MS
Full MatrixSpace of 6 by 6 sparse matrices over Rational Field
sage: MS.base_ring()
Rational Field
sage: MS = MatrixSpace(ZZ,3,5,sparse=False); MS
Full MatrixSpace of 3 by 5 dense matrices over Integer Ring
-
sage.matrix.matrix_space.
MatrixSpace
¶ The space of matrices of given size and base ring
EXAMPLES:
Some examples of square 2 by 2 rational matrices:
sage: MS = MatrixSpace(QQ, 2) sage: MS.dimension() 4 sage: MS.dims() (2, 2) sage: B = MS.basis() sage: list(B) [ [1 0] [0 1] [0 0] [0 0] [0 0], [0 0], [1 0], [0 1] ] sage: B[0,0] [1 0] [0 0] sage: B[0,1] [0 1] [0 0] sage: B[1,0] [0 0] [1 0] sage: B[1,1] [0 0] [0 1] sage: A = MS.matrix([1,2,3,4]) sage: A [1 2] [3 4]
The above matrix
A
can be multiplied by a 2 by 3 integer matrix:sage: MS2 = MatrixSpace(ZZ, 2, 3) sage: B = MS2.matrix([1,2,3,4,5,6]) sage: A * B [ 9 12 15] [19 26 33]
Check categories:
sage: MatrixSpace(ZZ,10,5) Full MatrixSpace of 10 by 5 dense matrices over Integer Ring sage: MatrixSpace(ZZ,10,5).category() Category of infinite enumerated finite dimensional modules with basis over (euclidean domains and infinite enumerated sets and metric spaces) sage: MatrixSpace(ZZ,10,10).category() Category of infinite enumerated finite dimensional algebras with basis over (euclidean domains and infinite enumerated sets and metric spaces) sage: MatrixSpace(QQ,10).category() Category of infinite finite dimensional algebras with basis over (number fields and quotient fields and metric spaces)
-
sage.matrix.matrix_space.
dict_to_list
(entries, nrows, ncols)¶ Given a dictionary of coordinate tuples, return the list given by reading off the nrows*ncols matrix in row order.
EXAMPLES:
sage: from sage.matrix.matrix_space import dict_to_list sage: d = {} sage: d[(0,0)] = 1 sage: d[(1,1)] = 2 sage: dict_to_list(d, 2, 2) [1, 0, 0, 2] sage: dict_to_list(d, 2, 3) [1, 0, 0, 0, 2, 0]
-
sage.matrix.matrix_space.
get_matrix_class
(R, nrows, ncols, sparse, implementation)¶ Return a matrix class according to the input.
Note
This returns the base class without the category.
INPUT:
R
– a base ringnrows
– number of rowsncols
– number of columnssparse
– (boolean) whether the matrix class should be sparseimplementation
– (None
or string or a matrix class) a possible implementation. See the documentation of the constructor ofMatrixSpace
.
EXAMPLES:
sage: from sage.matrix.matrix_space import get_matrix_class sage: get_matrix_class(ZZ, 4, 5, False, None) <type 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'> sage: get_matrix_class(ZZ, 4, 5, True, None) <type 'sage.matrix.matrix_integer_sparse.Matrix_integer_sparse'> sage: get_matrix_class(ZZ, 3, 3, False, 'flint') <type 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'> sage: get_matrix_class(ZZ, 3, 3, False, 'gap') <type 'sage.matrix.matrix_gap.Matrix_gap'> sage: get_matrix_class(ZZ, 3, 3, False, 'generic') <type 'sage.matrix.matrix_generic_dense.Matrix_generic_dense'> sage: get_matrix_class(GF(2), 2, 2, False, 'm4ri') <type 'sage.matrix.matrix_mod2_dense.Matrix_mod2_dense'> sage: get_matrix_class(GF(4), 2, 2, False, 'm4ri') <type 'sage.matrix.matrix_gf2e_dense.Matrix_gf2e_dense'> sage: get_matrix_class(GF(7), 2, 2, False, 'linbox-float') <type 'sage.matrix.matrix_modn_dense_float.Matrix_modn_dense_float'> sage: get_matrix_class(GF(7), 2, 2, False, 'linbox-double') <type 'sage.matrix.matrix_modn_dense_double.Matrix_modn_dense_double'> sage: get_matrix_class(RDF, 2, 2, False, 'numpy') <type 'sage.matrix.matrix_real_double_dense.Matrix_real_double_dense'> sage: get_matrix_class(CDF, 2, 3, False, 'numpy') <type 'sage.matrix.matrix_complex_double_dense.Matrix_complex_double_dense'> sage: get_matrix_class(ZZ, 3, 5, False, 'crazy_matrix') Traceback (most recent call last): ... ValueError: unknown matrix implementation 'crazy_matrix' over Integer Ring sage: get_matrix_class(GF(3), 2, 2, False, 'm4ri') Traceback (most recent call last): ... ValueError: m4ri matrices are only available in characteristic 2 sage: get_matrix_class(Zmod(2**30), 2, 2, False, 'linbox-float') Traceback (most recent call last): ... ValueError: linbox-float can only deal with order < 256 sage: get_matrix_class(Zmod(2**30), 2, 2, False, 'linbox-double') Traceback (most recent call last): ... ValueError: linbox-double can only deal with order < 8388608 sage: type(matrix(SR, 2, 2, 0)) <type 'sage.matrix.matrix_symbolic_dense.Matrix_symbolic_dense'> sage: type(matrix(GF(7), 2, range(4))) <type 'sage.matrix.matrix_modn_dense_float.Matrix_modn_dense_float'> sage: type(matrix(GF(16007), 2, range(4))) <type 'sage.matrix.matrix_modn_dense_double.Matrix_modn_dense_double'> sage: type(matrix(CBF, 2, range(4))) <type 'sage.matrix.matrix_complex_ball_dense.Matrix_complex_ball_dense'> sage: type(matrix(GF(2), 2, range(4))) <type 'sage.matrix.matrix_mod2_dense.Matrix_mod2_dense'> sage: type(matrix(GF(64,'z'), 2, range(4))) <type 'sage.matrix.matrix_gf2e_dense.Matrix_gf2e_dense'> sage: type(matrix(GF(125,'z'), 2, range(4))) # optional: meataxe <type 'sage.matrix.matrix_gfpn_dense.Matrix_gfpn_dense'>
-
sage.matrix.matrix_space.
is_MatrixSpace
(x)¶ Return whether
self
is an instance ofMatrixSpace
.EXAMPLES:
sage: from sage.matrix.matrix_space import is_MatrixSpace sage: MS = MatrixSpace(QQ,2) sage: A = MS.random_element() sage: is_MatrixSpace(MS) True sage: is_MatrixSpace(A) False sage: is_MatrixSpace(5) False
-
sage.matrix.matrix_space.
test_trivial_matrices_inverse
(ring, sparse=True, implementation=None, checkrank=True)¶ Tests inversion, determinant and is_invertible for trivial matrices.
This function is a helper to check that the inversion of trivial matrices (of size 0x0, nx0, 0xn or 1x1) is handled consistently by the various implementation of matrices. The coherency is checked through a bunch of assertions. If an inconsistency is found, an AssertionError is raised which should make clear what is the problem.
INPUT:
ring
- a ringsparse
- a booleancheckrank
- a boolean
OUTPUT:
- nothing if everything is correct, otherwise raise an AssertionError
- The methods determinant, is_invertible, rank and inverse are checked for
- the 0x0 empty identity matrix
- the 0x3 and 3x0 matrices
- the 1x1 null matrix [0]
- the 1x1 identity matrix [1]
If
checkrank
isFalse
then the rank is not checked. This is used the check matrix over ring where echelon form is not implemented.Todo
This must be adapted to category check framework when ready (see trac ticket #5274).