Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagelib
Path: blob/master/sage/matrix/change_ring.pyx
4069 views
1
"""
2
Functions for changing the base ring of matrices quickly.
3
"""
4
5
from matrix_space import MatrixSpace
6
from matrix_real_double_dense cimport Matrix_real_double_dense
7
from matrix_integer_dense cimport Matrix_integer_dense
8
9
from sage.rings.real_double import RDF
10
11
include "../ext/cdefs.pxi"
12
include "../ext/interrupt.pxi"
13
14
def integer_to_real_double_dense(Matrix_integer_dense A):
15
"""
16
Fast conversion of a matrix over the integers to a matrix with
17
real double entries.
18
19
INPUT:
20
A -- a dense matrix over the integers
21
22
OUTPUT:
23
-- a dense real double matrix
24
25
EXAMPLES:
26
sage: a = matrix(ZZ,2,3,[-2,-5,3,4,8,1030339830489349908])
27
sage: a.change_ring(RDF)
28
[ -2.0 -5.0 3.0]
29
[ 4.0 8.0 1.03033983049e+18]
30
sage: import sage.matrix.change_ring
31
sage: sage.matrix.change_ring.integer_to_real_double_dense(a)
32
[ -2.0 -5.0 3.0]
33
[ 4.0 8.0 1.03033983049e+18]
34
"""
35
cdef Py_ssize_t i, j
36
cdef Matrix_real_double_dense M
37
S = MatrixSpace(RDF, A._nrows, A._ncols, sparse=False)
38
M = Matrix_real_double_dense.__new__(Matrix_real_double_dense,
39
S, None, None, None)
40
for i from 0 <= i < A._nrows:
41
for j from 0 <= j < A._ncols:
42
M.set_unsafe_double(i, j, mpz_get_d(A._matrix[i][j]))
43
return M
44
45
46
47
48