For design documentation see sage.matrix.docs.
TESTS:
sage: A = Matrix(GF(5),3,3,srange(9))
sage: TestSuite(A).run()
Bases: sage.matrix.matrix0.Matrix
Returns a new matrix formed by appending the matrix (or vector) right on the right side of self.
INPUT:
OUTPUT:
A new matrix formed by appending right onto the right side of self. If right is a vector (or free module element) then in this context it is appropriate to consider it as a column vector. (The code first converts a vector to a 1-column matrix.)
If subdivide is True then any column subdivisions for the two matrices are preserved, and a new subdivision is added between self and right. If the row divisions are identical, then they are preserved, otherwise they are discarded. When subdivide is False there is no subdivision information in the result.
EXAMPLES:
Augmenting with a matrix.
sage: A = matrix(QQ, 3, range(12))
sage: B = matrix(QQ, 3, range(9))
sage: A.augment(B)
[ 0 1 2 3 0 1 2]
[ 4 5 6 7 3 4 5]
[ 8 9 10 11 6 7 8]
Augmenting with a vector.
sage: A = matrix(QQ, 2, [0, 2, 4, 6, 8, 10])
sage: v = vector(QQ, 2, [100, 200])
sage: A.augment(v)
[ 0 2 4 100]
[ 6 8 10 200]
Errors are raised if the sizes are incompatible.
sage: A = matrix(RR, [[1, 2],[3, 4]])
sage: B = matrix(RR, [[10, 20], [30, 40], [50, 60]])
sage: A.augment(B)
Traceback (most recent call last):
...
TypeError: number of rows must be the same, 2 != 3
sage: v = vector(RR, [100, 200, 300])
sage: A.augment(v)
Traceback (most recent call last):
...
TypeError: number of rows must be the same, 2 != 3
Setting subdivide to True will, in its simplest form, add a subdivision between self and right.
sage: A = matrix(QQ, 3, range(12))
sage: B = matrix(QQ, 3, range(15))
sage: A.augment(B, subdivide=True)
[ 0 1 2 3| 0 1 2 3 4]
[ 4 5 6 7| 5 6 7 8 9]
[ 8 9 10 11|10 11 12 13 14]
Column subdivisions are preserved by augmentation, and enriched, if subdivisions are requested. (So multiple augmentations can be recorded.)
sage: A = matrix(QQ, 3, range(6))
sage: A.subdivide(None, [1])
sage: B = matrix(QQ, 3, range(9))
sage: B.subdivide(None, [2])
sage: A.augment(B, subdivide=True)
[0|1|0 1|2]
[2|3|3 4|5]
[4|5|6 7|8]
Row subdivisions can be preserved, but only if they are identical. Otherwise, this information is discarded and must be managed separately.
sage: A = matrix(QQ, 3, range(6))
sage: A.subdivide([1,3], None)
sage: B = matrix(QQ, 3, range(9))
sage: B.subdivide([1,3], None)
sage: A.augment(B, subdivide=True)
[0 1|0 1 2]
[---+-----]
[2 3|3 4 5]
[4 5|6 7 8]
[---+-----]
sage: A.subdivide([1,2], None)
sage: A.augment(B, subdivide=True)
[0 1|0 1 2]
[2 3|3 4 5]
[4 5|6 7 8]
The result retains the base ring of self by coercing the elements of right into the base ring of self.
sage: A = matrix(QQ, 2, [1,2])
sage: B = matrix(RR, 2, [sin(1.1), sin(2.2)])
sage: C = A.augment(B); C
[ 1 183017397/205358938]
[ 2 106580492/131825561]
sage: C.parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
sage: D = B.augment(A); D
[0.89120736006... 1.00000000000000]
[0.80849640381... 2.00000000000000]
sage: D.parent()
Full MatrixSpace of 2 by 2 dense matrices over Real Field with 53 bits of precision
Sometimes it is not possible to coerce into the base ring of self. A solution is to change the base ring of self to a more expansive ring. Here we mix the rationals with a ring of polynomials with rational coefficients.
sage: R = PolynomialRing(QQ, 'y')
sage: A = matrix(QQ, 1, [1,2])
sage: B = matrix(R, 1, ['y', 'y^2'])
sage: C = B.augment(A); C
[ y y^2 1 2]
sage: C.parent()
Full MatrixSpace of 1 by 4 dense matrices over Univariate Polynomial Ring in y over Rational Field
sage: D = A.augment(B)
Traceback (most recent call last):
...
TypeError: not a constant polynomial
sage: E = A.change_ring(R)
sage: F = E.augment(B); F
[ 1 2 y y^2]
sage: F.parent()
Full MatrixSpace of 1 by 4 dense matrices over Univariate Polynomial Ring in y over Rational Field
AUTHORS:
Return the block matrix that has self and other on the diagonal:
[ self 0 ]
[ 0 other ]
EXAMPLES:
sage: A = matrix(QQ[['t']], 2, range(1, 5))
sage: A.block_sum(100*A)
[ 1 2 0 0]
[ 3 4 0 0]
[ 0 0 100 200]
[ 0 0 300 400]
Return the i‘th column of this matrix as a vector.
This column is a dense vector if and only if the matrix is a dense matrix.
INPUT:
EXAMPLES:
sage: a = matrix(2,3,range(6)); a
[0 1 2]
[3 4 5]
sage: a.column(1)
(1, 4)
If the column is negative, it wraps around, just like with list indexing, e.g., -1 gives the right-most column:
sage: a.column(-1)
(2, 5)
TESTS:
sage: a = matrix(2,3,range(6)); a
[0 1 2]
[3 4 5]
sage: a.column(3)
Traceback (most recent call last):
...
IndexError: column index out of range
sage: a.column(-4)
Traceback (most recent call last):
...
IndexError: column index out of range
Return a list of the columns of self.
INPUT:
of columns which is safe to change.
If self is sparse, returns columns as sparse vectors, and if self is dense returns them as dense vectors.
EXAMPLES:
sage: matrix(3, [1..9]).columns()
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
sage: matrix(RR, 2, [sqrt(2), pi, exp(1), 0]).columns()
[(1.41421356237310, 2.71828182845905), (3.14159265358979, 0.000000000000000)]
sage: matrix(RR, 0, 2, []).columns()
[(), ()]
sage: matrix(RR, 2, 0, []).columns()
[]
sage: m = matrix(RR, 3, 3, {(1,2): pi, (2, 2): -1, (0,1): sqrt(2)})
sage: parent(m.columns()[0])
Sparse vector space of dimension 3 over Real Field with 53 bits of precision
Return list of the dense columns of self.
INPUT:
EXAMPLES:
An example over the integers:
sage: a = matrix(3,3,range(9)); a
[0 1 2]
[3 4 5]
[6 7 8]
sage: a.dense_columns()
[(0, 3, 6), (1, 4, 7), (2, 5, 8)]
We do an example over a polynomial ring:
sage: R.<x> = QQ[ ]
sage: a = matrix(R, 2, [x,x^2, 2/3*x,1+x^5]); a
[ x x^2]
[ 2/3*x x^5 + 1]
sage: a.dense_columns()
[(x, 2/3*x), (x^2, x^5 + 1)]
sage: a = matrix(R, 2, [x,x^2, 2/3*x,1+x^5], sparse=True)
sage: c = a.dense_columns(); c
[(x, 2/3*x), (x^2, x^5 + 1)]
sage: parent(c[1])
Ambient free module of rank 2 over the principal ideal domain Univariate Polynomial Ring in x over Rational Field
If this matrix is sparse, return a dense matrix with the same entries. If this matrix is dense, return this matrix (not a copy).
Note
The definition of “dense” and “sparse” in Sage have nothing to do with the number of nonzero entries. Sparse and dense are properties of the underlying representation of the matrix.
EXAMPLES:
sage: A = MatrixSpace(QQ,2, sparse=True)([1,2,0,1])
sage: A.is_sparse()
True
sage: B = A.dense_matrix()
sage: B.is_sparse()
False
sage: A*B
[1 4]
[0 1]
sage: A.parent()
Full MatrixSpace of 2 by 2 sparse matrices over Rational Field
sage: B.parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
In Sage, the product of a sparse and a dense matrix is always dense:
sage: (A*B).parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
sage: (B*A).parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
TESTS:
Make sure that subdivisions are preserved when switching between dense and sparse matrices:
sage: a = matrix(ZZ, 3, range(9))
sage: a.subdivide([1,2],2)
sage: a.subdivisions()
([1, 2], [2])
sage: b = a.sparse_matrix().dense_matrix()
sage: b.subdivisions()
([1, 2], [2])
Return list of the dense rows of self.
INPUT:
EXAMPLES:
sage: m = matrix(3, range(9)); m
[0 1 2]
[3 4 5]
[6 7 8]
sage: v = m.dense_rows(); v
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
sage: v is m.dense_rows()
False
sage: m.dense_rows(copy=False) is m.dense_rows(copy=False)
True
sage: m[0,0] = 10
sage: m.dense_rows()
[(10, 1, 2), (3, 4, 5), (6, 7, 8)]
Return lift of self to the covering ring of the base ring R, which is by definition the ring returned by calling cover_ring() on R, or just R itself if the cover_ring method is not defined.
EXAMPLES:
sage: M = Matrix(Integers(7), 2, 2, [5, 9, 13, 15]) ; M
[5 2]
[6 1]
sage: M.lift()
[5 2]
[6 1]
sage: parent(M.lift())
Full MatrixSpace of 2 by 2 dense matrices over Integer Ring
The field QQ doesn’t have a cover_ring method:
sage: hasattr(QQ, 'cover_ring')
False
So lifting a matrix over QQ gives back the same exact matrix.
sage: B = matrix(QQ, 2, [1..4])
sage: B.lift()
[1 2]
[3 4]
sage: B.lift() is B
True
Return the matrix constructed from self using columns with indices in the columns list.
EXAMPLES:
sage: M = MatrixSpace(Integers(8),3,3)
sage: A = M(range(9)); A
[0 1 2]
[3 4 5]
[6 7 0]
sage: A.matrix_from_columns([2,1])
[2 1]
[5 4]
[0 7]
Return the matrix constructed from self using rows with indices in the rows list.
EXAMPLES:
sage: M = MatrixSpace(Integers(8),3,3)
sage: A = M(range(9)); A
[0 1 2]
[3 4 5]
[6 7 0]
sage: A.matrix_from_rows([2,1])
[6 7 0]
[3 4 5]
Return the matrix constructed from self from the given rows and columns.
EXAMPLES:
sage: M = MatrixSpace(Integers(8),3,3)
sage: A = M(range(9)); A
[0 1 2]
[3 4 5]
[6 7 0]
sage: A.matrix_from_rows_and_columns([1], [0,2])
[3 5]
sage: A.matrix_from_rows_and_columns([1,2], [1,2])
[4 5]
[7 0]
Note that row and column indices can be reordered or repeated:
sage: A.matrix_from_rows_and_columns([2,1], [2,1])
[0 7]
[5 4]
For example here we take from row 1 columns 2 then 0 twice, and do this 3 times.
sage: A.matrix_from_rows_and_columns([1,1,1],[2,0,0])
[5 3 3]
[5 3 3]
[5 3 3]
AUTHORS:
Return copy of this matrix, but with entries viewed as elements of the fraction field of the base ring (assuming it is defined).
EXAMPLES:
sage: A = MatrixSpace(IntegerRing(),2)([1,2,3,4])
sage: B = A.matrix_over_field()
sage: B
[1 2]
[3 4]
sage: B.parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
Return the ambient matrix space of self.
INPUT:
EXAMPLES:
sage: m = matrix(3, [1..9])
sage: m.matrix_space()
Full MatrixSpace of 3 by 3 dense matrices over Integer Ring
sage: m.matrix_space(ncols=2)
Full MatrixSpace of 3 by 2 dense matrices over Integer Ring
sage: m.matrix_space(1)
Full MatrixSpace of 1 by 3 dense matrices over Integer Ring
sage: m.matrix_space(1, 2, True)
Full MatrixSpace of 1 by 2 sparse matrices over Integer Ring
Create a matrix in the parent of this matrix with the given number of rows, columns, etc. The default parameters are the same as for self.
INPUT:
These three variables get sent to matrix_space():
The remaining three variables (coerce, entries, and copy) are used by sage.matrix.matrix_space.MatrixSpace() to construct the new matrix.
Warning
This function called with no arguments returns the zero matrix of the same dimension and sparseness of self.
EXAMPLES:
sage: A = matrix(ZZ,2,2,[1,2,3,4]); A
[1 2]
[3 4]
sage: A.new_matrix()
[0 0]
[0 0]
sage: A.new_matrix(1,1)
[0]
sage: A.new_matrix(3,3).parent()
Full MatrixSpace of 3 by 3 dense matrices over Integer Ring
sage: A = matrix(RR,2,3,[1.1,2.2,3.3,4.4,5.5,6.6]); A
[1.10000000000000 2.20000000000000 3.30000000000000]
[4.40000000000000 5.50000000000000 6.60000000000000]
sage: A.new_matrix()
[0.000000000000000 0.000000000000000 0.000000000000000]
[0.000000000000000 0.000000000000000 0.000000000000000]
sage: A.new_matrix().parent()
Full MatrixSpace of 2 by 3 dense matrices over Real Field with 53 bits of precision
Return the Numpy matrix associated to this matrix.
INPUT:
EXAMPLES:
sage: a = matrix(3,range(12))
sage: a.numpy()
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
sage: a.numpy('f')
array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]], dtype=float32)
sage: a.numpy('d')
array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]])
sage: a.numpy('B')
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]], dtype=uint8)
Type numpy.typecodes for a list of the possible typecodes:
sage: import numpy
sage: sorted(numpy.typecodes.items())
[('All', '?bhilqpBHILQPfdgFDGSUVOMm'), ('AllFloat', 'fdgFDG'), ('AllInteger', 'bBhHiIlLqQpP'), ('Character', 'c'), ('Complex', 'FDG'), ('Datetime', 'Mm'), ('Float', 'fdg'), ('Integer', 'bhilqp'), ('UnsignedInteger', 'BHILQP')]
Alternatively, numpy automatically calls this function (via the magic __array__() method) to convert Sage matrices to numpy arrays:
sage: import numpy
sage: b=numpy.array(a); b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
sage: b.dtype
dtype('int32') # 32-bit
dtype('int64') # 64-bit
sage: b.shape
(3, 4)
Return the i‘th row of this matrix as a vector.
This row is a dense vector if and only if the matrix is a dense matrix.
INPUT:
EXAMPLES:
sage: a = matrix(2,3,range(6)); a
[0 1 2]
[3 4 5]
sage: a.row(0)
(0, 1, 2)
sage: a.row(1)
(3, 4, 5)
sage: a.row(-1) # last row
(3, 4, 5)
TESTS:
sage: a = matrix(2,3,range(6)); a
[0 1 2]
[3 4 5]
sage: a.row(2)
Traceback (most recent call last):
...
IndexError: row index out of range
sage: a.row(-3)
Traceback (most recent call last):
...
IndexError: row index out of range
Return a list of the rows of self.
INPUT:
If self is sparse, returns rows as sparse vectors, and if self is dense returns them as dense vectors.
EXAMPLES:
sage: matrix(3, [1..9]).rows()
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
sage: matrix(RR, 2, [sqrt(2), pi, exp(1), 0]).rows()
[(1.41421356237310, 3.14159265358979), (2.71828182845905, 0.000000000000000)]
sage: matrix(RR, 0, 2, []).rows()
[]
sage: matrix(RR, 2, 0, []).rows()
[(), ()]
sage: m = matrix(RR, 3, 3, {(1,2): pi, (2, 2): -1, (0,1): sqrt(2)})
sage: parent(m.rows()[0])
Sparse vector space of dimension 3 over Real Field with 53 bits of precision
Sets the entries of column col in self to be the entries of v.
EXAMPLES:
sage: A = matrix([[1,2],[3,4]]); A
[1 2]
[3 4]
sage: A.set_column(0, [0,0]); A
[0 2]
[0 4]
sage: A.set_column(1, [0,0]); A
[0 0]
[0 0]
sage: A.set_column(2, [0,0]); A
Traceback (most recent call last):
...
IndexError: index out of range
sage: A.set_column(0, [0,0,0])
Traceback (most recent call last):
...
ValueError: v must be of length 2
Sets the entries of row row in self to be the entries of v.
EXAMPLES:
sage: A = matrix([[1,2],[3,4]]); A
[1 2]
[3 4]
sage: A.set_row(0, [0,0]); A
[0 0]
[3 4]
sage: A.set_row(1, [0,0]); A
[0 0]
[0 0]
sage: A.set_row(2, [0,0]); A
Traceback (most recent call last):
...
IndexError: index out of range
sage: A.set_row(0, [0,0,0])
Traceback (most recent call last):
...
ValueError: v must be of length 2
Return a list of the columns of self as sparse vectors (or free module elements).
INPUT:
modify it safely
EXAMPLES:
sage: a = matrix(2,3,range(6)); a
[0 1 2]
[3 4 5]
sage: v = a.sparse_columns(); v
[(0, 3), (1, 4), (2, 5)]
sage: v[1].is_sparse()
True
TESTS:
Columns of sparse matrices having no columns were fixed on Trac #10714.
sage: m = matrix(10, 0, sparse=True)
sage: m.ncols()
0
sage: m.columns()
[]
If this matrix is dense, return a sparse matrix with the same entries. If this matrix is sparse, return this matrix (not a copy).
Note
The definition of “dense” and “sparse” in Sage have nothing to do with the number of nonzero entries. Sparse and dense are properties of the underlying representation of the matrix.
EXAMPLES:
sage: A = MatrixSpace(QQ,2, sparse=False)([1,2,0,1])
sage: A.is_sparse()
False
sage: B = A.sparse_matrix()
sage: B.is_sparse()
True
sage: A
[1 2]
[0 1]
sage: B
[1 2]
[0 1]
sage: A*B
[1 4]
[0 1]
sage: A.parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
sage: B.parent()
Full MatrixSpace of 2 by 2 sparse matrices over Rational Field
sage: (A*B).parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
sage: (B*A).parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
Return a list of the rows of self as sparse vectors (or free module elements).
INPUT:
modify it safely
EXAMPLES:
sage: m = Mat(ZZ,3,3,sparse=True)(range(9)); m
[0 1 2]
[3 4 5]
[6 7 8]
sage: v = m.sparse_rows(); v
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
sage: m.sparse_rows(copy=False) is m.sparse_rows(copy=False)
True
sage: v[1].is_sparse()
True
sage: m[0,0] = 10
sage: m.sparse_rows()
[(10, 1, 2), (3, 4, 5), (6, 7, 8)]
TESTS:
Rows of sparse matrices having no rows were fixed on Trac #10714.
sage: m = matrix(0, 10, sparse=True)
sage: m.nrows()
0
sage: m.rows()
[]
Returns a new matrix formed by appending the matrix (or vector) bottom beneath self.
INPUT:
OUTPUT:
A new matrix formed by appending bottom beneath self. If bottom is a vector (or free module element) then in this context it is appropriate to consider it as a row vector. (The code first converts a vector to a 1-row matrix.)
If subdivide is True then any row subdivisions for the two matrices are preserved, and a new subdivision is added between self and bottom. If the column divisions are identical, then they are preserved, otherwise they are discarded. When subdivide is False there is no subdivision information in the result.
EXAMPLES:
Stacking with a matrix.
sage: A = matrix(QQ, 4, 3, range(12))
sage: B = matrix(QQ, 3, 3, range(9))
sage: A.stack(B)
[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
Stacking with a vector.
sage: A = matrix(QQ, 3, 2, [0, 2, 4, 6, 8, 10])
sage: v = vector(QQ, 2, [100, 200])
sage: A.stack(v)
[ 0 2]
[ 4 6]
[ 8 10]
[100 200]
Errors are raised if the sizes are incompatible.
sage: A = matrix(RR, [[1, 2],[3, 4]])
sage: B = matrix(RR, [[10, 20, 30], [40, 50, 60]])
sage: A.stack(B)
Traceback (most recent call last):
...
TypeError: number of columns must be the same, 2 != 3
sage: v = vector(RR, [100, 200, 300])
sage: A.stack(v)
Traceback (most recent call last):
...
TypeError: number of columns must be the same, 2 != 3
Setting subdivide to True will, in its simplest form, add a subdivision between self and bottom.
sage: A = matrix(QQ, 2, 5, range(10))
sage: B = matrix(QQ, 3, 5, range(15))
sage: A.stack(B, subdivide=True)
[ 0 1 2 3 4]
[ 5 6 7 8 9]
[--------------]
[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
Row subdivisions are preserved by stacking, and enriched, if subdivisions are requested. (So multiple stackings can be recorded.)
sage: A = matrix(QQ, 2, 4, range(8))
sage: A.subdivide([1], None)
sage: B = matrix(QQ, 3, 4, range(12))
sage: B.subdivide([2], None)
sage: A.stack(B, subdivide=True)
[ 0 1 2 3]
[-----------]
[ 4 5 6 7]
[-----------]
[ 0 1 2 3]
[ 4 5 6 7]
[-----------]
[ 8 9 10 11]
Column subdivisions can be preserved, but only if they are identical. Otherwise, this information is discarded and must be managed separately.
sage: A = matrix(QQ, 2, 5, range(10))
sage: A.subdivide(None, [2,4])
sage: B = matrix(QQ, 3, 5, range(15))
sage: B.subdivide(None, [2,4])
sage: A.stack(B, subdivide=True)
[ 0 1| 2 3| 4]
[ 5 6| 7 8| 9]
[-----+-----+--]
[ 0 1| 2 3| 4]
[ 5 6| 7 8| 9]
[10 11|12 13|14]
sage: A.subdivide(None, [1,2])
sage: A.stack(B, subdivide=True)
[ 0 1 2 3 4]
[ 5 6 7 8 9]
[--------------]
[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
The result retains the base ring of self by coercing the elements of bottom into the base ring of self.
sage: A = matrix(QQ, 1, 2, [1,2])
sage: B = matrix(RR, 1, 2, [sin(1.1), sin(2.2)])
sage: C = A.stack(B); C
[ 1 2]
[183017397/205358938 106580492/131825561]
sage: C.parent()
Full MatrixSpace of 2 by 2 dense matrices over Rational Field
sage: D = B.stack(A); D
[0.891207360061435 0.808496403819590]
[ 1.00000000000000 2.00000000000000]
sage: D.parent()
Full MatrixSpace of 2 by 2 dense matrices over Real Field with 53 bits of precision
Sometimes it is not possible to coerce into the base ring of self. A solution is to change the base ring of self to a more expansive ring. Here we mix the rationals with a ring of polynomials with rational coefficients.
sage: R = PolynomialRing(QQ, 'y')
sage: A = matrix(QQ, 1, 2, [1,2])
sage: B = matrix(R, 1, 2, ['y', 'y^2'])
sage: C = B.stack(A); C
[ y y^2]
[ 1 2]
sage: C.parent()
Full MatrixSpace of 2 by 2 dense matrices over Univariate Polynomial Ring in y over Rational Field
sage: D = A.stack(B)
Traceback (most recent call last):
...
TypeError: not a constant polynomial
sage: E = A.change_ring(R)
sage: F = E.stack(B); F
[ 1 2]
[ y y^2]
sage: F.parent()
Full MatrixSpace of 2 by 2 dense matrices over Univariate Polynomial Ring in y over Rational Field
TESTS:
A legacy test from the original implementation.
sage: M = Matrix(QQ, 2, 3, range(6))
sage: N = Matrix(QQ, 1, 3, [10,11,12])
sage: M.stack(N)
[ 0 1 2]
[ 3 4 5]
[10 11 12]
AUTHOR:
Return the matrix constructed from self using the specified range of rows and columns.
INPUT:
SEE ALSO:
The functions matrix_from_rows(), matrix_from_columns(), and matrix_from_rows_and_columns() allow one to select arbitrary subsets of rows and/or columns.
EXAMPLES:
Take the submatrix starting from entry (1,1) in a
matrix:
sage: m = matrix(4, [1..16])
sage: m.submatrix(1, 1)
[ 6 7 8]
[10 11 12]
[14 15 16]
Same thing, except take only two rows:
sage: m.submatrix(1, 1, 2)
[ 6 7 8]
[10 11 12]
And now take only one column:
sage: m.submatrix(1, 1, 2, 1)
[ 6]
[10]
You can take zero rows or columns if you want:
sage: m.submatrix(1, 1, 0)
[]
sage: parent(m.submatrix(1, 1, 0))
Full MatrixSpace of 0 by 3 dense matrices over Integer Ring